Отличия KOL-проекта от VCL-проекта


| Работа с формами | @Self | Добавление ссылки на модуль |
| Использование наследников TComponent из VCL |
| Автоматически генерируемые файлы |
| Вернуться назад |


Работа с формами

I. ДОБАВЛЕНИЕ ФОРМЫ.

1. File|New form.
2. Сохранить её В ТУ ЖЕ ДИРЕКТОРИЮ, где лежат остальные файлы проекта.
3. Бросить на форму компонент TKOLForm. (Убедиться так же, что на главной форме уже лежит TKOLApplet, если нет - положить).
4. Собственно, все. Если в TKOLProject свойство AutoBuild = True (по умолчанию), то через BuildDelay микросекунд форма превратится в KOL-совместимую. Если нет, надо сделать двойной щелчок по свойству Build компонента TKOLProject (на главной форме).

II. УДАЛЕНИЕ ФОРМЫ.

1. Project|Remove from prject... - как обычно.
2. В главной форме выделить TKOLProject, двойной щелчок по свойству Build.

III. ПЕРЕИМЕНОВАНИЕ ФОРМЫ.

Не изменяйте имя формы, вместо этого измените свойство FormName компонента TKOLForm, лежащего на этой форме. (Главная форма тоже должна быть открыта).

| Наверх | Вернуться назад |


@Self

Для разрешения конфликта между словом Self из VCL и словом @Self в KOL, которые интерпретируются по-разному, введено специальное слово Form. В VCL-проекте (зеркале) Form - это свойство компонента TKOLForm, возвращающее Self. В KOL-проекте - это поле объекта с именем исходной формы, и является указателем на объект самой формы. Так что, для корректного обращения к свойствам формы из назначенного обработчика в обоих случаях правильно будет звучать:

    Form.Caption := 'Hello!';

(В то же время старый стиль Caption := 'Hello!'; выдаст ошибку в сконвертированном KOL-проекте при попытке компиляции).

Но предлагаемое слово Form следует использовать только для доступа к свойствам формы. Для доступа к дочерним объектам формы оно не требуется (и неверно). Надо, как обычно:

    Button1.Caption := 'OK';
    Button1Click( Form );

| Наверх | Вернуться назад |


Добавление ссылки на модуль

Если необходимо использовать внешний модуль, не перечисленный в директиве uses, добавьте его как показано в приведенном отрывке:

{ KOL MCK } // Do not remove this line!
{$DEFINE KOL_MCK}

unit Unit1;

interface

{$IFDEF KOL_MCK}

uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes,

    Controls, mckCtrls {$ENDIF}, <-- список имен дополнительных модулей -->;

{$ELSE}

{$I uses.inc} mirror, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, mirror;

{$ENDIF}


| Наверх | Вернуться назад |


Использование наследников TComponent из VCL

Начиная с версии MCK v0.71, возможно использовать невизуальные компоненты, основанные на VCL, в визуальных проектах KOL+MCK. Для них будет сгенерирован код, их конструирующий, и разрушающий, присвоены события и те свойства, которые отличаются от присваиваемых в конструкторе.

Тем не менее, использование компонентов VCL в проектах, основанных на KOL, не рекомендуется, так как в любом случае они потянут за собой очень большой объем неиспользуемого кода.

В то же время, использование визуальных компонентов VCL в проекта MCK невозможно вообще. Компоненты TKOLProject и TKOLForm блокируются немедленно в случае обнаружения таких объектов на форме, что предотвращает порчу VCL-проектов в случае ошибочного бросания компонентов MCK на форму обычного VCL-проекта.

Если VCL компонент используется в проекте MCK, учтите, что:

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

- когда VCL компонент "брошен" на форму, Delphi добавляет ссылку на его модуль в кластер uses, но она оказывается обычно помещена между скобками {$IFDEF KOL_MCK} ... {$ENDIF}, так что проект не может быть нормально откомпилирован. Чтобы исправить это, перенесите ссылку на модуль за скобки:

    ..., SomeUnit {$ENDIF};   ->   ...   {$ENDIF}, SomeUnit;

| Наверх | Вернуться назад |


Автоматически генерируемые файлы

1. В дополнение к <YourProject>.dpr, генерируются файлы:

- <YourProject>_0.inc - содержит альтернативный код инициализации приложения, замещающий собой то, что находится в dpr-файле между begin и end. Структура примерно следующая:

Applet := NewApplet( ... );   // если используется TKOLApplet
[ Applet.Visible := False; ]    // опционально
[ Applet.OnMessage := ...; ] // опционально

{$I <YourProject>_1.inc}
{$I <YourProject>_2.inc}
// автоматический, создает формы
{$I <YourProject>_3.inc}

Run( ... );

{$I <YourProject>_4.inc}

- <YourProject>_1.inc - создается пустым, если не существует. Вы можете изменять его, помещая в него код, который сработает немедленно после (опциональной) инициализации переменной Applet. Например, здесь можно написать условный оператор, который предотвратит дальнейший запуск приложения в некоторых случаях.

- <YourProject>_2.inc - генерируется автоматически, содержит код инициализации автоматически создаваемых форм.
Никогда не модифицируйте его.

- <YourProject>_3.inc и <YourProject>_4.inc - так же, как и <YourProject>_1.inc, генерируется пустым, если не существует. Размещайте в нем свой код (любой).

2. Для каждого модуля формы автоматически генерируется файл <UnitName>_1.inc.
Никогда не модифицируйте его.

3. Файл uses.inc так же генерируется автоматически. Он содержит только слово 'uses', добавляется в финальный код через директиву {$I uses.inc}.
Никогда не модифицируйте его.

| Наверх | Вернуться назад |

Сайт управляется системой uCoz