Иллюстрированный самоучитель по Delphi 7 для профессионалов

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.