M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

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