Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга о KOL.doc
Скачиваний:
29
Добавлен:
30.04.2019
Размер:
1.77 Mб
Скачать

3 .19. Модуль данных (tkolDataModule)

По аналогии с модулем данных в VCL (TDataModule), этот объект MCK так же создан для организации модуля, содержащего только невизуальные объекты. Отличие от обычной формы на этапе разработки состоит только в том, что вместо объекта TKOLForm используется объект TKOLDataModule. Отличие на этапе исполнения состоит в том, что вызов конструирующей этот модуль функции не приводит к созданию формы, даже невидимой. Аналогично форме MCK, так же создается «контейнер» объектов, и для него строятся все указанные на этапе разработки объекты.

В противоположность фрейму, модуль данных чаще всего используется в единственном экземпляре (хотя это и не аксиома), и в этом случае как раз удобно оставлять соответствующую ему форму Delphi в списке авто-создаваемых, и обращаться к этому объекту через соответствующую глобальную переменную.

В частности, допускается поменять порядок автоматического создания форм так, чтобы модуль с данными был создан первым. Само по себе это безразлично. Контроль обращения в коде к еще не созданным объектам целиком и полностью является вашей заботой.

Однако, не пытайтесь использовать модуль с данными вместо формы, то есть использовать этот объект для создания приложения без форм все равно не удастся. Если вам нужно приложение совсем без формы, то MCK в этом случае вообще не понадобится (как и модуль данных).

3 .20. Форма

И наконец, следует упомянуть саму форму, которая так же является визуальным объектом. В случае проектирования без MCK форма создается вызовом

MyForm := NewForm( Applet, ’form caption’);

В качестве параметра parent всегда следует подставлять в вызове переменную Applet. Даже если апплет не используется, и переменная Applet равна nil, все равно использование переменной Applet будет верным, а если вы решите, что в проекте все-таки необходимо стало использовать самостоятельный объект Applet, то переписывать код, конструирующий формы не придется. Достаточно будет в этом случае вставить перед созданием первой формы вызов

Applet := NewApplet( ’applet title’ );

Разумеется, при проектировании с использованием MCK, код для конструирования формы вам выписывать может не понадобиться (если все формы создаются автоматически, и в единственном экземпляре). Но даже в случае использования MCK, все-таки, формы может понадобиться создавать динамически. Например, если форм в проекте много, то для ускорения начального старта приложения имеет смысл отложить создание форм до того момента, когда они действительно потребуются. Или в случае, когда одна и та же форма может быть сконструирована более одного раза для единовременного отображения на экране нескольких своих экземпляров (не вдаваясь в подробности того, зачем это может быть нужно).

В этом случае, обратите внимание на особенности использования форм в случае использования MCK. А именно, на этапе разработки MCK-зеркало формы (объект TKOLForm) генерирует код, и в частности, для формы с именем MyForm, создает глобальную функцию NewMyForm. Определение этой сгенерированной функции размещается в интерфейсной части самого модуля, а ее реализационный код – в файле <unit_name>_1.inc. Для создания объекта формы запись теперь будет другая, чем в случае «чистого» KOL:

NewMyForm( MyForm1, Applet );

Как видите, переменная, которой присваивается созданный объект формы, переместился из левой части оператора присваивания на место первого параметра, а параметр «заголовок» исчез. Заголовок теперь форма получает в коде «конструктора», сгенерированного MCK, на основании установок, выполненных вами во время проектирования формы.

При проектировании в MCK вы должны для изменения свойств формы выделить на форме компонент TKOLForm, и тогда уже в Инспекторе Объектов что-то изменять. Об этом упоминается в другом разделе этой книги, но не лишним будет повториться, раз уже речь зашла о форме.

Теперь остановлюсь на работе представителя объектного типа TControl во время исполнения, когда он выполняет функции формы. В случае, когда используется MCK, это переменная MyForm.Form, в случае же «чистого» KOL – это сама переменная MyForm типа PControl.

Имеются следующие особенности: в KOL форма не может обрабатывать сообщение OnClick (хотя события OnMouseDown и OnMouseUp работают исправно). Кроме того, свойство KeyPreview не доступно путем простого присваивания значения TRUE этому свойству. Необходимо предварительно добавить символ KEY_PREVIEW в опции проекта.