|
Частично FAQ состоит из материалов, расположенных на официальном сайте KOL и публикуется с
любезного разрешения Владимира
Кладова. |
Элементарно :) Надо использовать событие OnMessage, которое есть у любого
(практически, в разумных пределах) компонента. Делаем так:
|
| Нигде. Его просто нет. Вообще ситуации, когда Name нужен настолько редки, что вопрос о его введении в KOL даже не стоит. Нет, небыло и не будет. |
| Form1.Form.Handle или просто Form.Handle. |
|
Вопрос : У меня в KOL, при (после) присвоении (выполнения) события, просходят странные вещи - прога вылетает, зависает или событие всегда приходит с пустыми параметрами - почему? | ||||||
Вопрос стал классическими граблями, потому я еще раз его переделал, и даже малость переформулировал (чтобы привлечь дополнительное внимание). Когда я вижу в форуме вопрос подобного характера у меня "разум теряется", хочется крикнуть RTFM и нечто подобное, так что большая просьба его не задавать. При возникновении схожих симптомов обязательно вспомнить сей вопрос и ответ. Отмечу, что сие свойственно исключительно "чистым" KOL-писателям, те, кто используют MCK, вряд ли встретят такое, но в любом случаи это надо знать. Это была преамбула, теперь амбула...
Ситуация тривиальна, имеем объект (кнопка Button1) и хотим присвоить событие (для OnClick, MyClick), это делается так:
|
Есть два пути (может и больше, но я других незнаю :):
I) (Простой и только для одной формы - "Главной")
|
| Используй Str2Int (Int2Str). |
| KOL - это библиотека объектных типов для программирования в среде Delphi. Основная цель KOL - уменьшение размера конечной программы (Win32, GUI) в 5-10 раз по сравнению с тем, что дает VCL. Поддерживаются все 32-разрядные версии Delphi, начиная с Delphi2 и заканчивая Delphi6. MCK - это набор зеркальных компонент, позволяющих разрабатывать проект на основе библиотеки KOL визуально. Компоненты MCK устанавливаются на палитру компонентов, работа с ними происходит так же, как это обычно делается в Delphi при визуальной разработк. В откомпилированном проекте визуальные компоненты замещаются своими невизуальными двойниками из KOL. Использование MCK сокращает размер исполнимой программы так же, как и при использовании KOL невизуально. Преимущество - визуальная разработка. Недостаток - зависимость от версии Delphi. |
|
Вопрос : Зависит ли размер программы, сделанной с помощью KOL, от версии Delphi? |
| В очень малой степени. Разница между версиями Delphi3 и Delphi5 может колебаться (обычно) в пределах 1Кбайта, причем в любую сторону. Однако, замена system.dcu предлагается пока только для Delphi5 и Delphi6, а с этой заменой программа может быть еще на 9-10К меньше. Так что выбирайте сами. |
|
Вопрос : Библиотека KOL развивается, добавляются новые события, свойства, методы. Не опасаетесь ли Вы, что ваша библиотека раздуется до таких же размеров, как VCL? (И в чем тогда смысл изобретать велосипед...) |
| Нисколько! Благодаря своей продуманной организации, KOL позволяет компилятору Delphi использовать так называемый smart-linking (дословно: "остроумное связывание"). Возьмем, к примеру, одно из дополнений: событие OnDropFiles (добавлено 1 мая 2001, v0.71). Если оно не используется и не назначено, код программы не увеличивается НИ НА ОДИН БАЙТ. И только в случае, когда такое событие использовано в конечной программе, из библиотеки будет добавлен код двух процедур: метода SetOnDropFiles и процедуры WndProcDropFiles. Все дело в том, что на процедуру WndProcDropTarget имеется ссылка только из метода SetDropTarget, на который ссылка появляется только в случае явного присваивания значения событию OnDropTarget. И так устроена практически вся библиотека. (Так должна была бы быть построена VCL, но поскольку она устроена НЕ ТАК, то она и не может конкурировать с KOL в плане экономии кода, подключаемого к исполнимой программе). |
|
Вопрос : Я устанавливаю дополнительный MCK-компонент XXXXX в Delphi6. Создаю package, добавляю модуль XXXXX.pas, пытаюсь package установить, а в ответ получаю сообщение, что не найден модуль Proxies.dcu. И где я только такой модуль не искал, не могу найти. Что делать? |
| Это обычная ситуация для Delphi6. Добавьте в части использования ссылку на DesignIDE.dcp. Не забудьте также указать в опциях пакета 'Design time only' и 'Rebuild as needed' - это касается в том числе любой другой версии Delphi (начиная с D3). |
|
Вопрос : У меня в MirrorKOLPackageD6 (MirrorKOLPackageD7) уже имеется ссылка на designide.dcp, но проект не компилируется: Delphi требует файл proxies.pas (dsgnintf.pas). Где взять такой файл? |
| Ваш проект не является проектом MCK. Пожалуйста, прочитайте внимательно инструкцию - "III. НАЧАЛО НОВОГО ЗЕРКАЛЬНОГО ПРОЕКТА". Или, возможно, пропали какие-то файлы, содержащие важную информацию об опциях проекта. Правильные опции можно посмотреть, создав новый проект в соответствии с инструкцией, и открыв Projects|Options|Directories\Conditions. Строка Conditional defines должна содержать символ KOL_MCK, и в строке Unit aliases, обычное значение "Classes=;mirror=". Установите такие же опции для вашего проекта. |
|
Вопрос : Я использую замену sys*.dcu, но не могу использовать Write и другие подобные функции для работы с текстовыми файлами. Как мне заставить их работать? |
|
|
Вопрос : Я не использую замену sys*.dcu, но не могу использовать try-except. Что нужно сделать, чтобы обработка исключительных ситуации работала правильно? |
| Использовать в проекте модуль err.pas из пакета kol_err.zip. Примечание: для правильной работы try-finally этот модуль не требуется. |
|
Вопрос : Как реализовать кнопку по умолчанию, срабатывающую на нажатию клавиши Enter или Escape? |
| Использовать событие Applet.OnMessage (см. пример в TestKOL4). |
|
Вопрос : У меня установлен шрифт 125%. В VCL есть у формы свойство Scaled. Достаточно поставить его в False, и надписи на кнопках, метках и т.д. помещаются вне зависимости от разрешения экрана. Как сделать то же самое в KOL? |
| В том-то и дело, что ничего делать не надо. Кроме того, что прекратить использовать шрифт по умолчанию. Для этого достаточно обратиться к свойству Font формы сразу после ее создания (в результате происходит создание объекта TGraphicTool, реализующего шрифт, который в последующем устанавливается текущим для окна). Или можно обратиться к свойству Font окна приложения, родительского для всех форм. Например, так: MyForm.Font; Или можно сразу же и изменить какое-либо свойство шрифта. Например, установить новый стиль, цвет, размер. Учтите, что по умолчанию шрифт получает значения, прописанные в глобальных переменных DefFontHeight (20 пикселов), DefFontName ('MS Sans Serif') и т.д. В то же время, любые дочерние визуальные контролы в момент создания унаследуют шрифт от родительского окна (если шрифт установлен в родительском окне). Кроме того, в настоящее время поддерживается свойство AutoSize для таких визуальных объектов, как метка, кнопка, односточное поле ввода и т.п. В сочетании с возможностью задавать выравнивание (Align) для любых визуальных объектов это дает возможность обеспечить правильное отображение форм независимо от текущих пользовательских установок. |
|
Вопрос : Когда используется переменная Applet, анимация при минимизации происходит не с позиции главной формы, а от верхнего левого угла экрана. Как это поправить? | |
Использовать событие Applet.OnMessage:
|
|
Вопрос : Как сделать DLL, содержащую форму, изготовленную в KOL, и правильно вызвать ее? | |
Создать форму как обычно и оттестировать ее в обычном приложении, без DLL (форму можно создать визуально, используя MCK). Затем, приготовить проект DLL, содержащий экспортируемую функцию:
|
Всего имеется два варианта. Более простой, когда модальная форма создается непосредственно перед показом и разрушается сразу после того, как модальный диалог завершен - проще. И не требует использования отдельного объекта Applet (в MCK - не обязательно использовать компонент TKOLApplet на главной форме).
|
|
Вопрос : Возможно ли разрабатывать DLL, содержащую формы KOL визуально, используя MCK? | |
Конечно. Создайте проект MCK как обычно, и затем измените слово program в dpr-file на library. Сделайте формы не автоматически создаваемыми, и добавьте экспортируемые функции подобно тому, как это показано в ответе на предыдущий вопрос.
Чтобы предотвратить срабатывание Run( Applet ), измените файл <ваш_проект>_1.inc. Например, допишите туда:
|
|
Вопрос : Я хочу перемещать кнопку (или другой визуальный элемент) с помощью мыши. Как это сделать? | ||
Следующий код работает для всех типов визуальных объектов, включая кнопки:
|
|
Вопрос : Как рисовать прямо на рабочем столе, используя объект канвы (PCanvas) ? | |
|
|
Вопрос : Есть ли возможность в KOL работать с текстом через буфер обмена ? |
| Да, есть такая возможность. Реализуется она с помощью следующих функций: function Clipboard2Text: String; Возвращает из буфера обмена текст. function Text2Clipboard( const S: String ): Boolean; Помещает в буфер обмена текст. |
|
Вопрос : При генерации raise в программе,запущенной в Delpi IDE, и прога и делфи виснут. Что делать и как жить ? | |
Приведенный ниже код работает даже при замене system.dcu. Только в uses
надо добавить ссылку на err.pas (из kol_err.zip), вот так:
|
|
Вопрос : Есть ли в KOL готовый компонент-аналог TPageControl для VCL? |
| TKOLTabControl. |
|
Вопрос конечно интересный :)
Есть оффициальный сайт.
На нем можно найти последние версии KOLnMCK, компоненты, библиотеки и еще кое-что.
Вот прямые линки:
Базовая версия KOL Базовая версия MCK Последнюю версию KOLnMCK можно найти на Мастаке. Опять-же прямые линки: KOL и MCK в одном архиве Последняя версия KOL Последняя версия MCK |
|
Вопрос : В новостях написано вышла версия XYZ, а на сайте (Кладова - оффициальном!) выложенна ABC ( XYZ>ABC ), че за беспридел? |
|
KOLnMCK весит уже 0.5МБ, и выкладывать весь архив при каждом обновлении довольно накладно (да и скачивать), потому автор выкладывает Update'ы, небольшие файлики - при помощи которых можно "догнать" версию KOLnMCK до последней. Скачать Update'ы можно тут.
Последний Update еще тут. |
|
Вопрос : Ну есть у меня XYZ.upd и что дальше, как Update применять? |
Для того чтобы применить Update необходима программа - Updater 3.1 (последняя версия на момент написания FAQ - качать Updater). Потом все просто:
|