1.3 Библиотека компонентов CLX
Библиотека компонентов CLX более бедна по сравнению с VCL. Тем не менее, ее компоненты позволяют создавать полноценные приложения. В целом состав компонентов CLX напоминает Палитру компонентов ранних версий Delphi. Библиотека CLX загружается в Палитру компонентов при открытии существующего или создании нового проекта CLX.
Все компоненты CLX, имеющие аналоги в VCL, а таких большинство, имеют те же имена, что и компоненты VCL. Так как при переносе компонентов из Палитры компонентов на форму соответствующие модули подключаются в проект автоматически.
Исходные модули библиотеки CLX содержатся в папке \Delphi7\Source \С1х [3].
Первые три страницы Палитры компонентов (Standard, Additional, Common Controls), а также страница Dialogs содержат визуальные и невизуальные компоненты для конструирования пользовательского интерфейса приложения.
Из-за некоторых различий стандартов пользовательского интерфейса Windows и Linux часть визуальных компонентов CLX имеют несвойственные для Windows дополнительные функции.
Большинство компонентов на этих страницах хорошо знакомы разработчикам (правда, некоторые из них перекочевали из других страниц VCL – например TTimer и TSpinEdit). Однако существуют некоторые новинки. Это компоненты TLCDNumber, TTextviewer и TTextBrowser. Их краткая аннотация представлена в таблице 1.
Таблица 1 – Уникальные визуальные компоненты CLX
Компонент | Страница палитры компонентов | Описание |
TLCDNumber | Additional | Компонент отображает совокупность символов (букв и цифр), которые можно представить в режиме цифрового дисплея. Соответственно, не все буквы можно показать в этом компоненте. Например, буквы J, Q, Z и т. д. Строка символов содержится в свойстве Value |
TTextviewer | Common Controls | Компонент является аналогом компонента VCL TRichEdit. Предназначен для редактирования текстов |
TTextBrowser | Common Controls | Компонент развивает возможности компонента TTextviewer, предоставляя функции гипертекстовой разметки |
Дополнительные возможности по созданию кроссплатформенных приложений баз данных дают компоненты на страницах Data Access, DataControIs, DBExpress, InterBase. Безусловно, механизмы доступа к данным, используемые такими приложениями, в значительной степени зависят от операционной системы. Поэтому выбор способов доступа к данным сравнительно невелик.
1.4 Сходства и различия визуальных компонентов CLX и VCL
Большинство свойств и методов компонентов VCL и CLX идентичны. А существующие различия вызваны необходимостью использования специальных объектов – widget и особенностями представления визуальных элементов в Linux.
Базовые классы CLX – TControl и Twidgetcontrol для обеспечения прорисовки обращаются к динамической библиотеке Qt через заголовочный файл Qt.pas.
Таким образом, разработчик избавлен от необходимости работы с графическим интерфейсом Linux на низком уровне.
Для компонента CLX существует свойство property Handle: QWidgetH; которое является указателем на связанный объект widget и позволяет вызывать его методы напрямую.
Если экземпляр widget не создан, метод procedure CreateHandle; virtual;не только создает и инициализирует widget, но и устанавливает указатель Handle, создает объекты-перехватчики (см. ниже) и задает настройки по умолчанию для этого визуального компонента. При необходимости в классах-потомках метод CreateHandle перекрывается и в него добавляется новая функциональность.
Уничтожение созданного widget осуществляется методом procedure DestroyHandle; который уничтожает все дочерние widget и объекты-перехватчики, а также обнуляет свойства Handle И Hooks.
При необходимости для простого создания и инициализации widget можно использовать метод procedure CreateWidget; virtual; который сделает это, вызвав внешнюю функцию Qwidget_Create, и метод procedure InitWidget; virtual;который определяет визуальные параметры widget.
Также в классах CLX доступен указатель на родительский widget за счет использования свойства property ParentWidget: QWidgetH;
Если это свойство не определено, можно использовать свойство property ChildHandle: QWidgetH; родительского класса, например, таким образом:
if Not Assigned(ParentWidget) then if Assigned(Parent) then
Result := Parent.ChildHandle;
В классах CLX иначе реализована обработка событий. В Linux все события делятся на два вида – системные и события widget. Системные события обрабатываются процедурой – аналогом процедуры wndProc для компонентов VCL.
События, генерируемые widget, перехватываются и обрабатываются специальными объектами, взаимодействующими с объектом widget. Затем они передаются связанному объекту CLX, который вызывает необходимые обработчики событий.
Объекты-перехватчики создаются при вызове метода
procedure HookEvents; virtual;
а непосредственно для создания перехватчиков используется библиотечная функция Qwidget_hook_create. Метод HookEvents вызывается автоматически при создании widget.
Доступ к объекту-перехватчику возможен при помощи свойства
property Hooks: QWidget_hookH;
которое объявлено в секции protected и может быть использовано только при создании новых компонентов.
Классы CLX имеют очень интересное и важное свойство
property Style: TWidgetStyle;
которое позволяет управлять внешним видом и процессом отрисовки компонента.
Свойство
type TDefaultStyle = (dsWindows, dsMotif, dsMotifPlus, dsCDE, dsQtSGI, dsPlatinum, dsSystemDefault); property DefaultStyle: TDefaultStyle;
класса TWidgetStyle определяет стиль визуального компонента, задающий его внешний вид по умолчанию. Естественно, операционная система должна поддерживать выбранный стиль.
Кроме того, класс Twidgetstyle определяет некоторые наиболее общие параметры визуальных компонентов и обладает огромным числом обработчиков событий, которые вызываются при отрисовке всех возможных компонентов и экранных элементов.
Таким образом, свойство style является прекрасным инструментом для создания собственных компонентов с нестандартной функциональностью.
Для использования в Linux модернизирована система контекстной помощи для компонентов CLX. Теперь статья подсказки для визуального компонента может быть вызвана двумя способами.
Традиционно, путем определения уникального номера статьи в свойстве
property HelpContext: THelpContext;
и дополнительно, путем определения ключевого слова подсказки в свойстве
property HelpKeyword: String;
Способ вызова помощи определяется свойством
type THelpType = (htKeyword, htContext);
property HelpType: THelpType;
Свойства контекстной подсказки являются новыми в Delphi 7 и имеются у компонентов CLX и VCL.
Кроме того, отдельные компоненты CLX имеют дополнительные свойства и методы, определяющие их дополнительную функциональность в Linux.
В то же время некоторые привычные для программирования в Windows свойства компонентов отсутствуют в компонентах CLX. Это свойства обрамления компонента (BevelEdges, Bevellnner, BevelKind, BevelOuter); возможность двунаправленной печати текстов (свойство BioiMode); свойства для обратной совместимости с Windows 3.x (Ctl3D и ParentCtl3D); механизм присоединения и свойства Drag-and-Drop, хотя сам механизм Drag-and-Drop остался (свойства DockSite, DragKind, DragCursor). [4]
... Form1. Методы ListBox1.Clear, ComboBox1.Clear, Memo1.Clear и Edit1.Clear позволяют очистить соответствующие компоненты. 2 Практическая часть Выполнить обработку одномерного массива по индивидуальному заданию. Предусмотреть 2 варианта ввода массива: 1) в строке Edit по одному элементу; 2) в редакторе Memo или в строке Edit ввести весь массив. Вывод массива выполнить с помощью ...
... с обслуживанием сотрудников и как следствие снижение эффективности их работы, и как следствие снижение производительности работы организации в целом, что может привести к значительным финансовым потерям. 2. Практические аспекты внедрения корпоративного сервера на базе ОС Linux. 2.1 Основания для внедрения системы Решение любой задачи состоит из двух этапов. Первый этап теоретический ...
... плохо защищенного от появления ошибок; · низкая скорость программирования; · невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов. Машинно-независимые системы программирования – это средство описания алгоритмов решения задач и информации, подлежащей обработке. Они удобны в использовании для широкого круга пользователей и не требуют от ...
... . В начале своего появления сканеры взаимодействовали с программами посредством уникального для каждой модели сканера интерфейса, что серьезно затрудняло включение поддержки работы со сканером в прикладные программы. Для решения этой проблемы был разработан TWAIN - индустриальный стандарт интерфейса программного обеспечения для передачи изображений из различных устройств в Windows и Macintosh. ...
0 комментариев