Блог → Краткий обзор полезных компонентов для Delphi. Часть 1

В этом обзоре я вкратце рассмотрю библиотеки и компоненты, касающиеся прикладного программирования, а не баз данных, поскольку последние - вообще большая и отдельная тема. Речь будет идти только о самых свежих версиях продуктов. Эта заметка призвана послужить своего рода лоцманом в море Delphi-компонентов. Так что беритесь за штурвал, и вперёд - отправляемся в плавание!

RxLib 2.75

Знаменитая и горячо любимая отечественными программистами бесплатная библиотека, компоненты которой можно встретить в почти любом разработанном в России C++ Builder'е или Delphi-приложении. И недаром, в комплект поставки RxLib входит то, что действительно может пригодиться в прикладном программировании (а не просто набор бесполезных красивых кнопочек и меток). Увы, справочная система в дистрибутив не входит, но с сайта можно скачать множество Help'ов - и на русском, и на английском языках, а также локализованные для различных стран файлы ресурсов.

Давайте познакомимся с RxLib поближе. Среди визуальных компонентов отметим, в первую очередь, компоненты ввода. Целая серия Edit'ов предоставляет возможности выбора или ввода имен файлов и папок, валюты и т.д. Например, TFilenameEdit отображает рядом с полем ввода иконку с изображением открытой папки - кликнув на которую, пользователь вызовет диалог открытия файла. А TRxCalcEdit, вообще уникальная вещь: скрывающийся под обыкновенным Edit'ом калькулятор. Разработчики библиотеки не знают предела усовершенствованию стандартных компонентов. Так, появляется TRxCheck ListBox, в котором каждый элемент списка может быть отмечен соответствующим ему CheckBox'ом.

TFontComboBox: раньше мы писали длинный код, вызывая функцию перечисления установленных в системе шрифтов, и заполняли их именами ComboBox, а теперь за нас это сделает вышеупомянутый компонент - только поместите его на форму. И не нужно делать лишних движений. Подобная же вещь существует и для выбора цвета, но к сожалению, в списке выводятся только цвета из обычной 16-цветной палитры, и отсутствует возможность выбрать какой-нибудь не входящий в список цвет, вызвав диалоговое окно его выбора.

В составе RXLib мы получаем улучшенный RichEdit с поисковыми функциями,
реализованными на уровне методов компонента Undo/Redo (нет нужды слать сообщения API-шному ядру riched32.dll). Более дюжины свойств и двух десятков методов отличают TRxRichEdit от стандартного из Delphi. TRXSplitter - очень удобная вещь. С её помощью можно связать два компонента, и изменять их "границу соприкосновения". Для этого свойство Align одного компонента должно быть Left или Тор, а другого, соответственно, Right или Bottom. Когда пользователь будет передвигать полоску Splitter'а, связанные с ним компоненты начнут соответственно изменять свои границы.

Теперь поговорим о декоративных элементах библиотеки. TRXLabel - на редкость непопсовая текстовая метка, выглядящая приподнято и солидно. TRxGIFAnimator позволяет поместить на форму анимированное GIF-изображение. TRXDice - игральные кости на экране. Разумеется, "выпадающее" на них число можно контролировать. Из визуальных компонентов стоит также упомянуть приятные на вид часики, и пару кнопок и spin-элементов. Скромно, но со вкусом.

На закладке Tools библиотеки находится целый ряд компонентов, имеющих более функциональное назначение. Во-первых, это TRxTimerList, позволяющий навешивать на один системный таймер несколько обработчиков, что существенно экономит ресурсы. TStrHolder сохраняет в форме (dmf, а затем ехе-файле) строки с возможностью их XOR-кодирования, дабы скрыть текст от посторонних глаз.

A TRXIniFile, содержащий ряд новых методов для работы с файлами инициализации, умеет записывать не только одиночные значения параметров, но и целые списки строк, хранимые в TStrings. TMRUList - поможет в создании подменю со списком недавно использовавшихся (Most Recently Used) файлов. TRxFolderMonitor отслеживает изменения в заданной папке, согласно маске Filter, и реагирует на них по вашему усмотрению.

TVersionInfo вытаскивает из исполняемого файла данные ресурса VERSIONINFO, и раскладывает их по полочкам, то бишь по свойствам - build и прочее. TRXGradientCaption - преодоление заданных в системе цветов для заголовка окна. TRXMainMenu и TRXPopupMenu - придадут меню вашей программы более живой вид. TRxTrayIcon - наконец-то новички смогут без проблем помещать иконку своей программы в область Tray, и раскрывать окно обратно. TRXWindowHook служит для обработки сообщений, поступающих в окно-владельца. Иными словами, вы можете перехватить сообщение и обработать его - хоть до, хоть после получения сообщения компонентом-владельцем. Между прочим, очень полезная вещь!

Другое средство из той же утилитной области - TAppEvents, при помощи которого можно задавать свойства и методы объекта Application ещё на стадии дизайна. TSecretPanel - аналог стандартной TPanel, но с текстом, который может прокручиваться (циклично либо один раз), что может быть применено, например, для показа списка разработчиков.

Перечислять компоненты, входящие в RxLib, можно ещё долго - тем более, что мы даже не коснулись темы баз данных. Но я хочу в рамках этой заметки успеть рассказать ещё кое о чём, поэтому добавлю лишь пару слов о библиотеках функций, входящих в комплект RXLib.

Модуль AppUtils богат функциями, облегчающими работу с окнами и системным реестром. StrUtils, как и следует из названия, это модуль для работы со строками. В нём есть такие полезные вещи как: конвертирование арабских чисел в римские и наоборот, перевод числа в другую систему счисления, работа с командной строкой, и многое другое. FileUtil - большое количество файловых функций. Здесь и закрытие доступа к файлам, и трансформация длинных имен файлов в короткие и наоборот, несколько полезных диалоговых окон, функции получения путей к системным папкам, и прочее.

R&A Library 1.60

Ещё одна российская библиотека ставропольской компании Infa Soft. Как и RxLib, она поставляется с исходным кодом, и при этом, совершенно бесплатно. К сожалению, Help к ней отсутствует как класс. Впрочем, покопавшись немного в исходниках, человек, знающий толк в этом деле, сам поймет назначение свойств и методов компонентов. К тому же, в дистрибутив входит ряд примеров - также с открытым кодом. Библиотека уникальная, её "фишки" мы сейчас рассмотрим. Начнем, пожалуй, с мелочей. RACaptionButton - кнопка в заголовке окна. С надписью и картинкой. Лично мне эта штука кажется очень полезной. ColorButton - обыкновенная кнопка, но с возможностью задания цвета поверхности.

Несколько нестандартных комбо-боксов: RACombo (похожий более на меню), RAhtComboBox - с подсветкой избранных элементов, и двойной комбо-бокс. Любопытная вещь - RAScrollMax. Это элемент управления, сходный с раскрывающимися свитками в 3D Studio. Служит контейнером для других компонентов. В наличии имеются также несколько новых реализаций стандартных элементов управления - таких как scroll bar, progress bar, status bar и т.д.

Компонент TRegAuto служит для записи/чтения опубликованных свойств компонентов в ini-файл или реестр. TRAEditor - memo с поддержкой текста объемом более 64 Кб, цветовой раскраской, закладками, и autocompleteon, а TRAHLEditor - версия редактора с уже встроенной подсветкой синтаксиса многих языков программирования и разметки - Pascal, Perl, HTML. Хорошая вещь, даже откликается на некоторые memo-специфические сообщения. Правда, тут нет text-wrap, хотя можно устанавливать right margin на желаемое количество символов - в этом случае будет отображаться чисто декоративная граница строки.

Вся мощь библиотеки проявляется в интерпретаторе Object Pascal-подобного языка. Для этого служат RAI2 (собственно сам интерпретатор), и TRAI2Program - "запускатель" для таких программ. В этом Pascal-подобном языке есть доступ к Delphi-объектам (вы можете даже создавать экземпляры классов!), вызов функций WinAPI, обработка событий, исключения. Итак, теперь есть возможность использовать в вашей программе часть кода без фактической его компиляции.

Теперь самое время перейти к модулям с функциями, которые предоставляет R&A Library. IParser инкапсулирует мощный и удобный парсер строки. Модуль RAUtils заключает в себе множество процедур и функций, которые программисту удобно иметь под рукой. Например: RATextCalcHeight вычисляет необходимую высоту заданной строки текста для конкретного canvas, FindByTag может найти компонент по его тегу. MemStreamToClipBoard помещает содержимое экземпляра MemoryStream в буфер обмена (есть и обратная функция). Вот из таких мелких функций, отсортированных по группам (строковые, графические и т.д.) и состоит этот модуль.

RAStream реализует различные потоковые функции - сохранение и загрузка в/из Stream переменных как стандартных типов string, integer, longint, bool, так и "виндо-во-дельфийских" TFont, TBrush. В дистрибутиве присутствует также ряд средств, дополняющих среду разработки Delphi (IDE): TRAIntegerProperty позволяет работать с integer свойствами компонентов таким образом, что в качестве значений можно вводить выражения вроде "2+2" или "height+256". Zoom - утилита масштабирования окна редактора по комбинации Alt-Z. Run-time form designer совместно с TRAI2Fm - Delphi form runner могут создавать формы, без их компиляции - напрямую из .dmf и .pas файлов.

На этом я хотел бы закончить первую часть заметки, так как у меня в запасе осталось ещё довольно много информации, и я понимаю, что лучше не вываливать её в одну кучу, а разбить на части. Так что, не забывайте - заходите через пару дней в мой блог, и читайте продолжение. До встречи!