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

А.2. «Не могу установить mck», «откомпилировать mck приложение», спрашивает какой-то файл designintf, proxies», и тому подобное

Некоторые люди, задающие этот вопрос, иногда прямо переходят к делу, и просят меня выслать им этот злосчастный файл. На самом деле, файл такой вовсе не нужен, и единственная проблема заключается в недостаточно внимательном прочтении инструкции по созданию MCK-проекта. Все, что нужно сделать – это закрыть прототип проекта VCL, и открыть «истинный» проект MCK – с именем, указанным в свойстве projectDest компонента TKOLProject.

Иногда такая же беда происходит с ранее созданным проектом MCK. Причина поломки заключается обычно в потере символа условной компиляции KOL_MCK. Потеряться он мог, например, в результате удаления ненужного, на первый взгляд, файла с расширением drc в каталоге проекта (или вы могли забыть его взять с собой, перенося проект на другую машину или в другую папку). Лечение очень простое: открыть диалог со свойствами проекта и добавить символ KOL_MCK вручную в список символов условной компиляции (Conditional Defines, на закладке Directories/Conditionals – для всех версий Delphi, по крайней мере, от Delphi2 до Delphi7 такая закладка имеет место).

Причина, по которой designintf начинает требоваться, заключается, как теперь уже должно быть ясно, в наличии ссылки на него в модуле mirror.pas, являющемся основным в пакете MCK. Во всех модулях MCK имеется ссылка на модуль mirror.pas, закрытая от любопытных глаз компилятора условной конструкцией {$IFNDEF KOL_MCK}…{$ENDIF}. Это, так сказать, часть трюка, позволяющего MCK существовать и обманывать среду Delphi на этапе времени разработки, выдавая KOL-проект за добропорядочный проект VCL.

Совершенно аналогичное указанному явление может произойти и с приложением, в котором символ KOL_MCK присутствует, и никуда не подевался. Например, если при добавлении на форму какого-либо компонента MCK ссылка на модуль MCK (например, на mckCtrls.pas) будет вставлена за пределы вышеупомянутых скобок {$IFNDEF KOL_MCK}…{$ENDIF}. Сообщение компилятора при этом может быть несколько иным: например, о том, что некоторый модуль откомпилирован с другой версией VCL, и в результате компиляция не может быть продолжена. Решение то же самое: найти в секции USES модуль, ссылка на который попала в неверную позицию, и переместить ее внутрь скобок.

Что интересно, опыт первой борьбы с подобными ошибками не наставляет на путь истинный раз и навсегда. Есть очень большой шанс, что после успешной работы над одним или даже несколькими проектами, разработанными с применением MCK, вы опять встретите это сообщение, и не сможете сразу вспомнить, каково же решение проблемы.

А.3. Проект kol, содержащий две или более форм, работает как-то не так

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

Applet := NewApplet( ‘Title’ );

А уже затем все формы создавать как дочерние по отношению к апплету:

Form1 := NewForm( Applet, ‘Form1’ );

И самое главное, процедура Run должна вызываться именно с этим объектом специального назначения в качестве параметра:

Run( Applet );

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

В проектах KOL/MCK глобальная переменная Applet подобна глобальной переменной Application типа TApplication в проектах VCL. Но, в отличие от VCL, использование Applet’а не является обязательным. В случае простого приложения из одной формы, без использования этого объекта часто можно обойтись. По крайней мере, если вы не используете других специальных возможностей этого объекта, а именно: скрытия кнопки приложения на панели задач, работы с иконкой в системном трее, и других. Это позволит сэкономить еще пол-килобайта кода, что для приложения малого размера может быть заметно.