Минимализм по-дельфийски…

Самой большой проблемой для программистов, пишущих на Delphi, всегда оставались большие размеры получаемых exe-файлов. Что делать – за удобство приходилось платить. Но эту проблему можно решить. Для этого существует библиотека классов KOL – Key Objects Library.

Немного истории
Библиотека KOL, впервые появившаяся еще в прошлом веке (в 1999 году), довольно быстро обзавелась немалым числом поклонников. Главной причиной этого стали поразительно маленькие размеры программ, написанных с её использованием. Но в то время работа с KOL была похожа на написание программ на чистом WinAPI, что делало ее не слишком привлекательной для программистов, привыкших разрабатывать приложения, используя мощь VCL. Однако, через несколько лет после выхода KOL (все это время непрерывно совершенствуемой) она обзавелась надстройкой, позволяющей разрабатывать приложения, используя все прелести визуального программирования. Эта надстройка получила название MCK (Mirror Classes Kit – Набор зеркальных классов). Сегодня речь пойдет преимущественно об этой части проекта KOL, так как большинство любителей Delphi предпочитают визуальное программирование.

Как оно работает
Я не буду подробно останавливаться на механизмах работы KOL и MCK (этот вопрос слишком обширен, чтобы рассмотреть его в рамках этой статьи). Отмечу только, что благодаря особенностям строения KOL в исполнимый файл включаются только те фрагменты кода, к которым вы реально обращаетесь в своей программе. Остальной код KOL (размер которой составляет 2 Мбайта!) не включается в программу. Благодаря этому размеры программ, написанных с использованием KOL в 10-20 раз (!!!) меньше, чем размеры тех же программ, написанных на VCL. Так, например, размер exe-файла программы, которую вы видите на рисунке, составляет всего 17 Кбайт, тогда как размер аналогичной программы, написанной на VCL (в Delphi 7) составил 390 Кбайт. И это еще не предел! Используя замены для некоторых системных модулей Delphi (например, System.pas) можно уменьшить размеры файлов еще на 2-3 Кбайта. Ну а если ещё и UPX использовать…

Разница в размерах очевидна

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

Установка
Итак, приступим. Для начала вам придется скачать архив KOL/MCK с официального сайта. Как вы заметили, сайт находится в зоне .ru (в 2009 году сайт переехал на новый домен и теперь размещается в зоне .net — прим. ред.), а это означает, что KOL написан нашим с вами соотечественником (Владимиром Кладовым). Но не будем отвлекаться. Обращаю ваше внимание, что на странице загрузки этого сайта вы найдёте не самую новую версию KOL/MCK, а для того, чтобы «довести» её до действительно последней вам придётся скачать специальную программу UPDATER и файлы-заплатки для KOL. Причина такого подхода вполне объяснима: архив с полной версией KOL/MCK «весит» около 700 Кбайт и скачивать его каждый раз (по мнению автора) не удобно, особенно если учесть, что иногда обновления выходят чуть не каждый день. На данный момент последняя версия имеет номер 2.05, при этом основной архив содержит версию 2.0, а далее придётся обновлять.
С закачкой, я надеюсь, вы разобрались. Теперь приступим к установке. Для начала просто распакуйте архив с KOL/MCK в одну папку (можно, конечно раскидать KOL и MCL по разным папкам, но в одной будет удобнее). Затем, если вы хотите использовать MCK, установите пакет MirrorKOLPackageDx.dpk (где x – номер версии Delphi от 2 до 7). Внимание! Автор MCK рекомендует закрыть в IDE все файлы перед установкой этого пакета (дабы избежать возможных неприятностей). После установки библиотека готова к использованию. Если же вы собираетесь использовать «чистый» KOL, то делать, в общем-то, ничего и не надо – для использования KOL нужно просто подключить файл Kol.pas к проекту.

Так подключаются KOL/MCK

Обращаю ваше внимание, что использование MCK никак не сказывается на размерах получаемых exe-файлов, поэтому подумайте, стоит ли отказываться от прелестей визуального программирования.

Первое знакомство1
Хотелось бы надеяться, что и установка не вызвала у вас никаких проблем. Если так, то приступим к написанию своей первой программы на MCK. Дабы этот процесс не вызвал у вас затруднений (что часто бывает при первом знакомстве), описываю все подробно.
Шаг 1. Создайте новое приложение (File->New-Application). Внимание! Пока не кладите на форму никаких компонентов!
Шаг 2. Сохраните все файлы проекта в отдельную папку (File->Save All). Обратите внимание, что все файлы зеркального проекта должны находиться в одной папке. Внимание! Не называйте dpr-файл именем конечного проекта, оставьте его имя стандартным (Project1.dpr). А вот главный pas-модуль можно назвать «нормальным» именем.
Шаг 3. Положите на форму компонент TKOLProject (он находится на вкладке KOL палитры компонентов) и измените его свойство ProjectDest, отвечающее за имя проекта.
Шаг 4. Положите на форму компонент TKOLForm2.
Шаг 5. Собственно на этом шаге проект KOL/MCK уже готов. Теперь остается только удалить из папки проекта файлы Project1.*, так как теперь они не нужны (файлы проекта с именем, которое вы указали на третьем шаге, к этому моменту созданы автоматически).

Delphi MCK

Главное окно Delphi с формой MCK

Если всё прошло нормально, то можно приступать к работе с новым проектом KOL/MCK, если же нет, то (цитирую автора) «вы, наверное, не читали инструкцию».

Приступаем к работе
Поскольку, как я уже неоднократно говорил, написание программ на MCK мало чем отличается от работы с VCL, я не буду подробно описывать этот процесс, остановившись, в первую очередь, на отличиях, а также на тех моментах, которые могут вызвать затруднения у новичков.
В первую очередь нужно отметить, что совместное использование компонентов VCL и MCK в рамках одного проекта невозможно. Если вы попытаетесь разместить на форме VCL-проекта MCK-компонент, он будет блокирован и наоборот. Из этого правила, однако, есть одно исключение – вы можете использовать невизуальные компоненты, основанные на VCL в своих проектах KOL/MCK. Хотя такой подход не рекомендуется, так как использование VCL ведёт к тому, что в исполнимый файл попадает большой объём «лишнего» кода, что сведёт все преимущества KOL на нет.
Второй важный момент – это работа со свойствами форм. В MCK-проекте за параметры формы отвечает компонент TKOLForm и все свойства формы (кроме размеров и позиции) нужно изменять через него. Это же относится и к событиям.
Ещё одно существенное отличие состоит в использовании объекта self для форм. Если в VCL вы могли использовать, например, конструкцию caption:='Моя форма VCL', то при написании кода на MCK необходимо использовать служебное слово Form (Form.Caption:='Моя форма на KOL').
Подробнее об этих и других отличиях вы можете узнать из документации MCK. Я же перейду к моментам, которые обычно вызывают затруднения у новичков или же являются несколько необычными для VCL.
Первое, о чём здесь нужно сказать – это добавление ссылок на дополнительные модули. Все ссылки должны добавляться в определённом месте модуля, сразу после конструкции {$IFDEF KOL_MCK}:

uses (* стандартные модули *) {$IFNDEF KOL_MCK} (* модули KOL *) {$ENDIF} (* дополнительные модули *)

Ещё один важный момент: в файлах проекта KOL многие фрагменты кода генерируются автоматически и, в большинстве случаев, редактировать такие фрагменты вручную нельзя. Так, например, категорически запрещено редактировать всё, что расположено между конструкциями {$IF[N]DEF}...{$ENDIF}! Это касается и файлов .inc, ручное редактирование которых может привести к полной неработоспособности проекта MCK!

Вообще, работа с проектами KOL/MCK требует большего внимания, нежели работа с обычными проектами VCL. Сам автор предупреждает, что он не несёт никакой ответственности за возможные повреждения, вызванные использованием KOL.

Советы и секреты3
В этой части статьи я постараюсь ответить на самые распространённые вопросы, касающиеся KOL/MCK, дабы людям, решившим поближе познакомиться с этой библиотекой, не пришлось буквально через пять минут после её установки лезть в Интернет в поисках ответа на простейший вопрос.
Итак, первое: у компонентов KOL нет свойства name. По мнению автора ситуации, когда его использование реально необходимо, крайне редки.
Второе: для того, чтобы узнать handle KOL-формы, можно использовать Form1.Form.Handle или просто Form.Handle.
Третье: чтобы добавить значок к главной MCK-форме, нужно установить свойство KOLProject1.dprResource:=True и загрузить значок проекта обычным способом (Свойства проекта->Значок). При первой компиляции Delphi выдаст сообщение «Can not find resource file: *. Recreated.», это не ошибка, можете нажать OK. Впоследствии это сообщение появляться не будет.
Четвёртое: вместо функций StrToInt и IntToStr используйте KOL-функции Str2Int и Int2Str соответственно.
Пятое: для работы с буфером обмена в KOL используются две функции:

function Clipboard2Text: String;
function Text2Clipboard( const S: String ): Boolean;

Это, на мой взгляд, самые частые вопросы, возникающие при первом использовании KOL/MCK. Более подробный FAQ можно найти, например, на сайте www.delphiworld.narod.ru.
Кроме того, на официальном сайте библиотеки вы найдёте огромное количество примеров, которые помогут вам освоить KOL/MCK. Там же можно найти дополнительные модули для обеих библиотек, позволяющие расширить функциональность. Ну и, разумеется, вы можете просто поискать дополнительную информацию в Интернете (некоторое количество ссылок, посвящённых KOL, имеется и на сайте автора). До не давнего времени работал замечательный сайт www.kol.mastak.ru, но с декабря 2004 года он недоступен. Много полезной информации есть на форуме «Мастеров Delphi».

Заключение
Естественно, в рамках одной статьи невозможно рассказать все о такой технологии, как KOL. Но я и не ставил это своей целью, я хотел лишь заинтересовать разработчиков этой библиотекой, решающей главную проблему Delphi – большие размеры исполнимых файлов. Надеюсь, мне это удалось…

1. Всё, написанное в этой части статьи, основано на документации MCK.
2. На этом шаге пользователям Delphi 5 (и только её!) необходимо добавить в Search path проекта путь к папке [$(Delphi)SourceToolsApi].
3. Этот раздел основан на информации с официального сайта программы, а также FAQ по KOL/MCK с сайта www.delphiworld.narod.ru

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *