Джедайское программирование

В стандартную поставку Delphi уже входит большое число всевозможных компонентов. Однако, как показывает практика, во многих случаях их функциональности недостаточно. Конечно, никто не запрещает написать собственный компонент, отвечающий именно вашим требованиям. Но такой путь может быть очень длинным, и его использование не всегда оправданно. Так что волей-неволей приходится задумываться об установке дополнительных компонентов. Один из самых популярных наборов подобного рода для Delphi разрабатывается в рамках проекта “Jedi” и носит название JVCL (JEDI Visual Component Library).

Коротко
Проект JEDI является одним из самых известных сообществ OpenSource. В его рамках ведется разработка различных дополнений для среды Delphi. На данный момент наиболее активные ветви проекта — это JCL (Jedi Code Library) и JVCL (JEDI Visual Component Library). В рамках первой ветви ведется работа над системными модулями для Delphi, многие из которых являются отличной заменой своим стандартным аналогам. В рамках же JVCL разрабатывается замена штатной библиотеке VCL, чьи возможности уже много лет ос­таются примерно на одном уровне.
На сегодняшний день в состав JVCL влились такие известные библиотеки, как “Globus” и “RxLibrary” и многие другие библиотеки и компоненты отдельных разработчиков.
Надо отметить, что проект JEDI заручился официальной поддержкой Borland и одно из зеркал его официального сайта находится на сервере этой корпорации.

Установка
Для правильной установки JVCL понадобится скачать либо полный пакет (вклю­чающий в себя также и JCL) размером 8 Мбайт1, либо две эти библиотеки по отдельности.
Обратите внимание, что установка JVCL невозможна без предварительной установки JCL.
После того, как обе библиотеки скачаны, распакуйте их в отдельную папку. Причем имя папки не должно содержать русских символов!2

Сам процесс установки обеих библиотек организован очень оригинально. Вы запускаете файл install.bat, находящийся в папке JCL. Этот скрипт вызывает компилятор Delphi и собирает из исходников программу установки, которая в свою очередь компилирует библиотеки JCL и регистри­рует их в IDE.
Аналогично работает и инсталлятор JVCL. Только он в ходе работы предложит вам выбрать необходимые пакеты. Каждый пакет содержит определенный набор компонентов (обычно сгруппированных по функциям: панели, кнопки и тому подобное). Кроме того, вы можете выбрать тип устанавливаемых пакетов: версия для VCL или версия для CLX3.
Замечание: перед установкой JCL или JVCL необходимо закрыть все окна Delphi IDE. В противном случае установщик откажется работать!
После установки в палитре компонентов появится более двух десятков вкладок, каждая из которых содержит от 2 до 30 компонентов (всего около трех сотен!).

Обзор компонентов
Так как количество компонентов, входящих в состав JVCL, просто огромно, я не буду описывать их все. Вместо этого перечислю основные категории и коротко расскажу о самых, на мой взгляд, интересных компонентах каждой.
1. Non Visual. На этой вкладке содержатся “невизуальные” компоненты. Среди них, к примеру, можно найти Translator (удобнейшее средство для создания многоязычных интерфейсов), компоненты для работы с тегами ID3, значок в трее, средство для ограничения времени работы программы и еще около трех десятков различных компонентов.
2. Persistence. Здесь собраны компоненты, облегчающие сохранение настроек. С их помощью можно одной строкой кода сохранить настройки всех интерфейсных компонентов.
3. Application, Forms. C помощью компонентов этой вкладки можно расширить функциональность вашего приложения и его отдельных окон. Здесь есть “Аниматор”, добавляющий эффекты при открытии окна, “Магнит”, заставляющий окна липнуть друг к другу, и много еще чего…
4. Data Access и другие. Я не буду подробно останавливаться на этих вкладках (всего их около десяти). Скажу лишь, что они содержат компоненты для работы с различными базами данных. Во многом эти компоненты схожи со стандартными, но их возможности гораздо шире.
5. Encrypt, Compress. Как видно из названия, в эту категорию попали компоненты, отвечающие за шифровку и сжатие данных. В частности, с их помощью вы можете работать с .cab-архивами, использовать библиотеку zLib, а также алгоритмы шифровки “Cipher”.
6. Buttons. Количество кнопок, расположенных на этой вкладке просто огромно: их здесь более 20! Правда, некоторые имеют очень уж узкую специальность (например, есть кнопка, вызывающая меню “Последние документы”).
7. Bars, Panels. Здесь вы найдете около 40 различных панелей (плавающих и не очень). К примеру, есть панель, размеры которой можно без лишней мороки изменять во время работы программы. А еще есть панель-палитра, которая будет незаменима при написании графических редакторов.
8. Labels. Не поверите, но в JVCL даже обычных меток почти десяток! Одна из них, например, может рисоваться с использованием спецэффектов (прокрутка, “выпадение” символов, “рэндомайзер”), а другая — вообще рисует символы, используя фрагменты шкурок от WinAMP’а!
9. List, Combos. Списков в наличии тоже немало (больше трех десятков). Есть, к примеру, готовый PlayList. Ну, а среди выпадаю­щих списков водятся такие, с помощью которых можно выбрать цвет или шрифт.
10. Scrollers. На этой вкладке собранны компоненты, умеющие что-либо прокручивать. Например, текст (можно быстро сделать что-то вроде титров из “StarWars”) или панель с кнопками (как в палитре Delphi).
11. Trackers, Sliders, Splitters. На этой вкладке с длинным названием расположены всего семь компонентов, хотя, на мой взгляд, их можно было заменить тремя, но более универсальными4. Собственно, что это за компоненты, понятно из названия вкладки. Из особенностей можно отметить графический “Slider” (очень удобно при использовании в программе со скинами — сам проверял).
12. Visual. В эту категорию попали визуальные компоненты, которым не нашлось места на других вкладках. К примеру, тут есть “Кубик” (наподобие игрального) или “Лупа”. А еще сюда затесался “Предпросмотр рисунков” (рисунки отображаются в виде миниатюр с подписями).
13. Edits. Если вы еще не догадались, поясню — тут обитают “Редакторы”. Причем как маленькие (“выбор папки”, “ввод значения”), так и большие (аналоги Memo, с подсветкой синтаксиса и поддержкой Unicode).
14. Images. Здесь тоже все понятно без комментариев — рисунки, они и в Африке рисунки. Правда, по функциональности они намного превосходят стандартные (возможна трансформация изображений, анимация и другое). В эту же категорию попал компонент для захвата видео.
15. Dialogs. Это одна из самых “многолюдных” вкладок. Диалогов в JVCL более пятидесяти. Большинство из них — стандартные системные диалоги (форматирование диска, ошибка, запрос сле­дующего диска, поиск компьютера…), вызывать которые с помощью этих компонентов намного удобнее, чем средствами WinAPI.
16. Docking. Немногочисленные компоненты, собранные на этой вкладке, позволяют организовать интерфейс из плавающих панелей (как это сделано в Delphi и других средах разработки).
17. DotNet. Компоненты из этой категории совместимы с технологией “.NET”. Правда, я так и не понял, используют ли они dotNet или просто изображают его.
18. Globus. Сюда входят составляющие, ранее выходившие в составе библиотеки Globus. Многие из них повторяют функциональность других компонентов JVCL, но есть и уникальные.
19. Internet, Network. Думаю, понятно, что сюда попали компоненты, ответственные за работу с сетью. Лично мне здесь не хватает только браузера, который бы мог просматривать страницы без сторонних модулей (типа движка IE). Все остальное тут есть.
20. NavPanel. Здесь собраны компоненты для построения навигационной панели. Панель эта представляет собой нечто среднее между интерфейсом Outlook (по функциональности) и Office 2003 (по внешнему виду).
21. Print Preview. Про эти компоненты скажу коротко: просмотр перед печатью всего-чего-угодно.
22. System. “Системные” компоненты. Полтора десятка. От просмотра буфера обмена и файловых операций до управления HID-устройствами и джойстиками.
23. Wizard. Мастер. Просто мастер. По стилю и по сути напоминает InstallShield.
24. XP Controls. Элементы управления в стиле XP (или Office), одинаково выглядящие в любой версии Windows. В наличии есть кнопка, флаг, индикатор прогресса и панель. Стилем можно управлять прямо во время работы программы.
У-ф-ф! Вроде все… Хотя, конечно, это лишь верхушка айсберга. На самом деле есть еще больше десятка категорий и несколько сотен компонентов, не включенных в этот обзор.

Примеры…
В штатную поставку JVCL входит огромное количество примеров, демонстрирующих всю мощь этой уникальной библиотеки. Если вы не хотите компилировать их по отдельности, то можете воспользоваться специальным скриптом (работающим аналогично инсталлятору JVCL).
Еще один способ познакомиться с возможностями Джедая — это так называемый “MegaDemo”, в окне которого собраны все примеры!

Заключение
Ну что тут еще можно сказать… Если вы установите эту библиотеку, то качать дополнительные компоненты для своих программ придется в несколько раз реже, чем вы это делали обычно. А может, и вообще больше не придется. Здесь есть все, что только может понадобиться разработчику.
Хотя есть у JVCL и несколько минусов. Главный — это большой размер дистрибутива, регулярное обновление которого может стать проблемой в наших условиях (впрочем, обновляется он не так уж и часто).
Второй минус — большой объем лишнего кода, включаемого в исполнимый файл. Использование даже одного компонента из JVCL “тянет” за собой базовые файлы библиотеки, что приводит к солидному “утяжелению” программ.
Третий, последний, минус — медлительность в работе некоторых компонентов. Особенно это относится к компонентам графическим. Из-за этой неторопливости отрисовка многих элементов интерфейса превращается в сплошное “мельтешение”.
Если первые два минуса не всегда критичны, то третий ставит под сомнение использование графических компонентов JVCL в приложениях с активно меняющимися окнами (например, при использовании “шкурок”).
Но во многих случаях, когда все эти недостатки несущественны, библиотеку JVCL можно смело рекомендовать всем разработчикам, ведь она позволяет существенно сэкономить время на написание приложений. А время, как говорится, — деньги…


Рекомендуем почитать: