Кроссплатформенное программирование для Linux

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

 


Знаете ли Вы, что класс, Class - Класс в программировании - это множество объектов, которые обладают одинаковой структурой, поведением и отношением с объектами из других классов.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution