Сходства и различия визуальных компонентов 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).
|