2000 г
Полезные компоненты для пользователей Delphi и С++Builder:
Delphi VCL Extensions (RX) Lib v 2.50
Наталия Елманова.
Компьютер Пресс - CD, 1999, N 1
© Copyright N.Elmanova & ComputerPress Magazine.
Библиотека компонентов Delphi VCL Extensions (RX) Library, разработанная Федором Кожевниковым, Сергеем Королевым и Игорем Павлюком, представляет собой бесплатный свободно распространяемый (freeware) продукт, пользующийся заслуженной популярностью в течение трех лет как в нашей стране, так и за рубежом. По мнению наиболее квалифицированных разработчиков, анализировавших исходные тексты RX Library, компоненты и классы этой библиотеки практически не содержат ошибок.
Версия 2.50 этой библиотеки содержит более 60 визуальных и невизуальных компонентов, а также набор полезных классов и функций, включая исходные тексты всех модулей. В настоящее время она доступна по адресу http://www.torry.ru/vcl/packs/rxlib.zip. Там же лежат дополнения к этой версии (http://www.torry.ru/vcl/packs/rxfix.zip)
Данная версия этой библиотеки может быть использована со всеми имеющимися на сегодняшний день версиями Delphi (начиная с версии 1.0 и заканчивая версией 4.0) и С++Builder (версии 1.0 и 3.0). Библиотека также содержит файлы ресурсов для 15 языков, помимо русского и английского. Файл справки доступен на русском языке (по мнению зарубежных разработчиков, отсутствие англоязычной справки - самый серьезный недостаток данной библиотеки, но российские разработчики, я надеюсь, не очень пострадают от ее отсутствия).
После установки библиотеки в соответствии с прилагаемыми к ней инструкциями в палитре компонентов появятся три дополнительные страницы: RX Controls (управляющие элементы, рис. 1а), RX Tools (разнообразные полезные компоненты, в основном невизуальные, рис.1б) и RX DBAware (компоненты доступа к данным и отображения данных, рис. 1c). Рассмотрим эти компоненты более подробно.
a)
б)
c)
Рис.1. Компоненты из коллекции Delphi VCL Extensions (RX) Library.
Страница RX Controls
На странице RX Controls содержатся разнообразные управляющие элементы, представляющие собой в большинстве своем расширения стандартных интерфейсных элементов, способные украсить приложение и улучшить его пользовательский интерфейс. В частности, она содержит несколько любопытных расширений обычного поля редактирования, например, компонент для ввода даты TDateEdit, поле редактирования, в которое можно поместить результат расчета на всплывающем калькуляторе TСalcEdit, компоненты для ввода имен файлов и каталогов, позволяющие как непосредственно ввести их, так и выбрать с помощью стандартного диалога Windows, специальный компонент для ввода денежных величин и некоторые другие полезные компоненты, представляющие вариации на тему однострочного редактора текста. Следует заметить, что применение большинства из них может быть весьма полезным, например, в финансовых и бухгалтерских приложений (рис. 2).
Рис.2. Вариации на тему полей редактирования
Помимо вариаций на тему полей редактирования, эта страница содержит также весьма любопытные комбинированные списки, например, списки для выбора цвета и шрифта, выпадающий список с горизонтальной полосой прокрутки для отображения длинных строк, переключатели, меняющие форму, сплиттеры и другие управляющие элементы (рис. 3).
Рис.3. Переключатели и комбинированные списки
Помимо перечисленных компонентов, на странице RX Controls содержатся компоненты, способные пригодиться разработчикам игр: компонент TAnimatedImage для отображения последовательно меняющихся графических изображений, будильник с меняющимся стилем и даже игральная кость (рис. 4).
Рис.4. Некоторые компоненты страницы RX Controls, способные пригодиться разработчикам игр
Страница RX Tools
Страница компонентов RX Tools содержит различные полезные компоненты, способные упростить создание пользовательских интерфейсов. Среди них следует особо отметить невизуальный компонент TPageManager, позволяющий создавать серии сменяющих друг друга форм наподобие используемых серий форм в некоторых экспертах Delphi и C++Builder (рис. 5).
Рис.5. Одна из сменяющихся форм, созданных с помощью компонента TPageManager
Еще один полезный компонент страницы RX Tools - TSpeedBar - настраиваемая инструментальная панель, позволяющая пользователю с помощью операции drag-and-drop перетаскивать кнопки из предусмотренного разработчиком набора, отображаемого в интуитивно понятном диалоге, на инструментальную панель (рис. 6).
Рис.6. Диалог, сгенерированный компонентом TSpeedBar
Весьма интересен также компонент TClipboardViewer, предназначенный для просмотра содержимого буфера обмена, независимо от типа содержащихся в нем данных. Отметим, что весьма полезная утилита просмотра содержимого буфера, существовавшая в Windows 3.1 и куда-то исчезнувшая в Windows 95/98/NT, может быть создана с использованием этого компонента буквально за минуту (рис. 7).
Рис.7. Компонент TClipboardViewer
Весьма интересен также компонент TDualListDialog - двойной список с перемещаемыми элементами (подобные диалоговые панели нередко используются в средах разработки Delphi и C++Builder, рис. 8).
Рис.8. Диалог, сгенерированный невизуальным компонентом TDualListDialog
Из других компонентов отметим также TFormPlacement и TFormStorage - невизуальные компоненты, которые позволяют хранить сведения о состоянии и размере содержащей их формы, а также сведения о текущих значениях свойств компонентов, находящихся на ней, во внешнем ini-файле, TPicClip - массив битовых изображений, TSecretPanel - панель, позволяющую разместить, помимо обычных визуальных элементов, скрытое изображение или текст, причем последний может циклически прокручиваться (рис. 9).
Рис.9. Компоненты TPicClip и TSecretPanel
Отметим также невизуальный компонент TMRUManager, предназначенный для работы со списками последних использованных элементов, таких как последние открытые (закрытые) файлы, таблицы баз данных и т.д. Этот компонент позволяет автоматически создавать подменю со списком таких элементов или добавлять их к существующему меню.
Еще один невизуальный компонент - TAppEvents - предназначен для создания в режиме дизайна формы обработчиков событий TApplication и задания значения некоторых свойств TApplication.
Весьма интересны также TRxMainMenu и TRxPopupMenu - аналоги обычных компонентов для отображения меню, используемых в Delphi и C++Builder, и позволяющие добавлять к пунктам меню графические изображения. Пользователям Delphi 4 они могут показаться не представляющими интереса, однако напомним, что и эти, и другие компоненты работоспособны во всех версиях Delphi и C++Builder, начиная с первой версии Delphi, а рынок приложений, нетребовательных к ресурсам рабочих станций, в том числе 16-разрядных, в нашей стране пока еще достаточно велик.
Страница RX DBAware
Эта страница содержит компоненты доступа к данным и отображения данных, расширяющие возможности, предоставляемые обычными компонентами Data Access и Data Controls.
Из невизуальных компонентов следует отметить компонент TRxQuery , авляющийся наследником TQuery и обладающий дополнительным свойством Macros, позволяющим во время выполнения изменять текст запроса, например, заменив предложение WHERE или ORDER BY, что практически невозможно сделать, используя стандартные параметризованные запросы, генерируемые компонентом TQuery (рис. 10).
Рис.10. Пример использования компонента TRxQuery: на этапе выполнения можно изменить порядок сортировки и условия отбора записей
Компонент TSQLScript предназначен для выполнения наборов из нескольких SQL-предложений. Если база данных, в которой эти предложения выполняются, позволяет использовать транзакции, этот компонент позволяет определить, за одну или за несколько транзакций эти предложения выполняются.
Компонент TMemoryTable предназначен для создания небольших таблиц в оперативной памяти. Использование таких таблиц бывает необходимо в том случае, когда требуется высокая скорость доступа к содержащимся в низ данным.
Компонент TQBEQuery позволяет работать с запросами формата QBE, используемого в Database Desktop и Corel Paradox.
Компонент TRxDBFilter реализует возможность наложения фильтров на курсор (набор данных, передаваемый на рабочую станцию), без применения дополнительных запросов. Преимущество фильтров в их быстродействии и отсутствии доплнительных обращений к серверу баз данных, что может оказаться необходимым в тех случаях, когда требуется многократно динамически изменять условия отбора записей. Фильтр может накладываться на любой набор данных, как TTable, так и TQuery или TQBEQuery, при этом наличие индексов для полей, на которые накладываются условия, не требуется (рис. 11).
Рис.11. Пример использования компонента TRxDBFilter: на этапе выполнения можно изменить условия фильтрации записей.
Компонент TDBSecurity предоставляет два диалога, которые являются общепринятыми в приложениях, работающих с базами данных: диалог регистрации пользователя и диалог смены пароля пользователя. Он также также может заблокировать приложение, минимизировав его, и потребовать от пользователя пароль для его разблокировки.
Еще три компонента позволяют осуществить доступ к объектам доступных баз данных. Компонент TBDEItems предоставляет доступ к спискам всех доступных баз данных (включая псевдонимы), драйверов баз данных или языковых драйверов (в зависимости от значения свойства ItemType), доступ к которому осуществляется как к обычной таблице. Компонент TDatabaseItems предоставляет доступ к спискам объектов (таблиц, файлов или хранимых процедур) базы данных в виде набора данных, доступ к которому осуществляется как к обычной таблице. Компонента TTableItems предоставляет доступ к списку элементов (полей, индексов, правил ссылочной целостности и т.д.) в виде набора данных, доступ к которому осуществляется как к обычной таблице.
Компонент TDBProgress иcпользует Callback-функции IDAPI для сообщения о ходе выполнения длительных операций с базами данных.
Из визуальных компонентов следует отметить компонент TRxDBGrid - наследник TDBGrid, позволяющий отображать BLOB-поля базы данных в виде пиктограмм, изменить цвет шрифта и фона любой ячейки таблицы (либо любой ее строки или столбца) в зависимости от значения поля или имени поля набора данных, сохранять и восстанавливать порядок и ширину столбцов в INI-файле или в реестре, а также выбирать несколько записей. Заголовки колонок этого компонента могут быть с помощью использованы как кнопки, например, для изменения порядка сортировки отображаемых данных. Можно также зафиксировать в компоненте TRxDBGrid несколько первых колонок (рис. 12).
Рис.12. Пример использования компонента TRxDBGrid
Компонент TDBStatusLabel, изображенный на этом же рисунке, позволяет отобразить состояние набора данных, а также число записей и номер текущей записи.
Еще один полезный визуальный компонент - TDBIndexCombo, выводящий комбинированный список индексов таблицы, позволяя пользователю менять порядок сортировки записей в наборе данных, полученном на основе таблицы.
Компонент TRxDBLookupCombo почти полностью аналогичен компоненту TDBLookupCombo, но позволяет использовать в качестве свойства LookupSource любой источник данных - как TTable, так и TQuery, при этом свойство LookupField не обязательно должно быть индексированным полем. Он также позволяет производить поиск нужной записи при наборе первых нескольких символов. Этот компонент также позволяет задать изображения для рисования в левой части каждой строки списка, в зависимости от содержимого полей базы данных (рис. 13).
Рис.13. Пример использования компонентов TDBIndexCombo и TRxDBLookupCombo
Помимо рассмотренных визуальных компонентов для отображения данных, библиотека содержит также разнообразные поля редактирования, в некоторых случаях аналогичные компонентам со страницы RX Controls (TRxDBCalcEdit, TDBDateEdit и др.)
Некоторые полезные функции и классы
Класс TOleController реализует контроллер автоматизации, иногда удобный тем, что позволяет вызывать методы сервера автоматизации, имена которых заканчиваются символом "$".
Класс TGIFFrame предназначен для доступа к графическим изображениям из файла формата GIF. GIF-файл может содержать более одного изображения, то еть быть анимированным. Предоставляет доступ к характеристикам изображения, таким как частота смены кадров, цвет, считающийся прозрачным и др.
TGIFImage позволяет читать и записывать графические данные в формате GIF. Свойства класса TGIFImage предоставляют доступ к характеристикам изображения. Класс TGIFImage поддерживает изображения, содержащие до 256 цветов, форматов GIF 87a и GIF 89a, включая графические расширения, такие как анимированное изображение, прозрачность и т.д. Имеется возможность рисовать изображения и отдельные кадры из анимированных изображений.
Для иллюстрации работы этих двух классов в комплекте поставки библиотеки имеется пример RX GIF Animator, позволяющий создавать анимированные изображения и напоминающий по функциональности Mcrosoft GIF Animator (рис. 14).
Рис.14. RX GIF Animator из комплекта поставки RX Library
Функция GetFormulaValue вычисляет результат математического выражения, заданного параметром Formula. Для вычислений используется объект класса TRxMathParser. Класс TRxMathParser, в свою очередь, представляет анализатор арифметических выражений, предоставляемых в виде строки.
Большое количество полезных функций имеется в модуле AppUtils, BDEUtils, FileUtil, MaxMin, VCLUtils. Перечислять их здесь не имеет смысла - они все подробно описаны в файле справки, поставляемой с библиотекой.
Некоторые полезные примеры
С библиотекой RX Library поставляется несколько примеров, иллюстрирующих применение компонентов и классов, входящих в ее состав.
Пример RX Library Demo Program иллюстрирует работу большинства компонентов (рисунки 2-11 данной статьи сделаны с использованием этого примера). Эта демонстрационная программа существует также в версии для C++Builder.
Пример RX GIF Animator позволяет создавать анимированные изображения в формате GIF и предназначен для иллюстрации классов, предназначенных для работы с этим форматом.
Особый интерес представляет утилита Database Explorer (имеющаяся в 16-и 32-разрядном вариантах, а также в варианте для C++Builder). Некоторые ее функциональные возможности имеются в SQL Explorer, но по сравнению с ним имеются и другие полезные возможности, например, трассировка SQL-предложений, экспорт и импорт данных и др. (рис. 15).
Рис.15. Утилита Database Explorer из комплекта поставки RX Library
Таким образом, библиотека RX Library предоставляет разработчикам набор весьма полезных компонентов, классов и функций, способных улучшить функциональность и пользовательский интерфейс приложений самого разнообразного назначения - от игр до сложных корпоративных прилжений, созданных с помощью всех версий Delphi и C++Builder.