Introduction Downloads Applications News FAQ
Forum Subscribe Articles Links Other

 

 Key Objects Library     

 Key Objects Library     

ЧАВО (ЧАсто задаваемые Вопросы и Ответы)

 

В: Что такое KOL? Что такое MCK?

О: KOL - это библиотека объектных типов для программирования в среде Delphi. Основная цель KOL - уменьшение размера конечной программы (Win32, GUI) в 5-10 раз. Поддерживаются Delphi5, Delphi4, Delphi3, Delphi2. MCK - это набор зеркальных компонент, позволяющих разрабатывать проект на основе библиотеки KOL визуально. Компоненты MCK устанавливаются на палитру компонентов, работа с ними происходит так же, как это обычно делается в Delphi при визуальной разработк. В откомпилированном проекте визуальные компоненты замещаются своими невизуальными двойниками из KOL, в результате чего размер программы сокращается в несколько раз.

 

В: Зависит ли размер программы, сделанной с помощью KOL, от версии Delphi?

О: В очень малой степени. Разница между версиями Delphi3 и Delphi5 может колебаться (обычно) в пределах 1Кбайта, причем, в любую сторону. Однако, замена system.dcu предлагается пока только для Delphi5, а с этой заменой программа может быть еще на 9-10К меньше. Так что выбирайте.

 

В: Библиотека KOL развивается, добавляются новые события, свойства, методы. Не опасаетесь ли Вы, что ваша библиотека раздуется до таких же размеров, как VCL? (И в чем тогда смысл изобретать велосипед...)

О: Нисколько! Благодаря своей продуманной организации, KOL позволяет компилятору Delphi использовать так называемый smart-linking (дословно: "остроумное связывание"). Возьмем, к примеру, одно из недавних дополнений: событие OnDropFiles (1-May-2001, v0.71). Если оно не используется и не назначено, код программы не увеличивается НИ НА ОДИН БАЙТ. И только в случае, когда такое событие использовано в конечной программе, из библиотеки будет добавлен код двух процедур: метода SetOnDropFiles и процедуры WndProcDropFiles. Все дело в том, что на процедуру WndProcDropTarget имеется ссылка только из метода SetDropTarget, на который ссылка появляется только в случае явного присваивания значения событию OnDropTarget. И так устроена практически вся библиотека. (Так должна была бы быть построена VCL, но поскольку она устроена НЕ ТАК, то она и не может конкурировать ни с KOL, ни с какой другой библиотекой в плане экономии кода, подключаемого к исполнимой программе).

 

В: Я использую замену sys*.dcu, но не могу использовать Write и другие подобные функции для работы с текстовыми файлами. Как мне заставить их работать?

О: 1. Прочитать readme.txt J.
     2. Вызвать процедуру UseInputOutput (один раз, например в dpr-файле).

 

В: Как реализовать кнопку по умолчанию, срабатывающую на нажатию клавиши Enter или Escape?

О: Использовать событие Applet.OnMessage (см. пример в TestKOL4).

 

В: У меня установлен шрифт 125%. В VCL есть у формы свойство Scaled. Достаточно поставить его в False, и надписи на кнопках, метках и т.д. помещаются вне зависимости от разрешения экрана. Как сделать то же самое в KOL?

О: В том-то и дело, что ничего делать не надо. Кроме того, что прекратить использовать шрифт по умолчанию. Для этого достаточно обратиться к свойству Font формы сразу после ее создания (в результате происходит создание объекта TGraphicTool, реализующего шрифт, который в последующем устанавливается текущим для окна). Или можно обратиться к свойству Font окна приложения, родительского для всех форм. Например, так:

   MyForm.Font;

Или можно сразу же и изменить какое-либо свойство шрифта. Например, установить новый стиль, цвет, размер. Учтите, что по умолчанию шрифт получает значения, прописанные в глобальных переменных DefFontHeight (20 пикселов), DefFontName ('MS Sans Serif') и т.д. В то же время, любые дочерние визуальные контролы в момент создания унаследуют шрифт от родительского окна (если шрифт установлен в родительском окне).

 

В: Когда используется переменная Applet, анимация при минимизации происходит не с позиции главной формы, а от верхнего левого угла экрана. Как это поправить?

О: Использовать событие Applet.OnMessage:

function TSomeObject.KOLForm1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
  if (Msg.message = WM_MOVE) or (Msg.message = WM_SIZE) then
    Applet.BoundsRect := Form.BoundsRect;
  Result := False;
end;

 

В: Как сделать DLL, содержащую форму, изготовленную в KOL, и правильно вызвать ее?

О: Создать форму как обычно и оттестировать ее в обычном приложении, без DLL (форму можно создать визуально, используя MCK). Затем, приготовить проект DLL, содержащий экспортируемую функцию:

   function ExecuteKOLform( < some parameters > ): Integer; stdcall;
   var MyKOLForm: PControl;
   begin
     Applet := NewApplet( '' );
     MyKOLForm := NewForm( Applet, 'DllKolForm' );
     ... { здесь создать прочие элементы формы, проинициализировать, ... }
     MyKOLForm.ShowModal;
     ... { здесь можно прочитать состояние некоторых визуальных элементов, поскольку они все еще существуют }
     Applet.Free;
   end;

 

В: Возможно ли разрабатывать DLL, содержащую формы KOL визуально, используя MCK?

О: Конечно. Создайте проект MCK как обычно, и затем измените слово program в dpr-file на library. Сделайте формы не автоматически создаваемыми, и добавьте экспортируемые функции подобно тому, как это показано в ответе на предыдущий вопрос.

+ Послать вопрос

Copyright (C) by Vladimir Kladov, 2000-2001