|
Объектная концепция кроссплатформенного программирования
Программирование в Delphi подразумевает
использование тех или иных классов, будь то формы, невизуальные
компоненты или списки. Концепция кроссплатформенного
программирования в рамках одной среды разработки имеет
в виду наличие общего ядра, обеспечивающего функционирование
зависимой от операционной системы программной надстройки.
В Delphi таким ядром стала библиотека времени выполнения
(RunTime Library — RTL), с использованием классов которой
созданы библиотеки компонентов VCL и CLX.
В соответствии с этим для обеспечения
кроссплатформенной разработки в исходные коды базовых
классов Delphi были внесены изменения. Общим ядром библиотек
компонентов VCL и CLX является иерархия классов
TObject — TFersistent — TComponent, которые входят
в состав RTL. Это позволяет среде разработки легко интегрировать
кроссплатформенные проекты и работать со стандартными
проектами для Windows.
Расхождения двух ветвей начинаются
с класса TControl, который обеспечивает
функциональность всех визуальных компонентов. Начиная
с этого
класса и далее, библиотеки компонентов
имеют собственные исходные коды. Многие модули CLX имеют
названия, аналогичные модулям VCL, но с добавлением
первой буквы Q, например
QControls.pas.
В библиотеке VCL классы TControl
и Twincontrol являются предками
всех компонентов, которые должны уметь отображать себя
на экране при помощи графических средств операционной
системы. В библиотеке CLX аналогичную задачу выполняют
классы TControl и TWidgetControl.
Они обеспечивают работоспособность компонентов-потомков
в качестве экранных объектов widget.
Большинство свойств и методов классов
Twincontrol и TWidgetControl
совпадают. Однако есть и различия, вызванные особенностями
графических интерфейсов операционных систем Windows
и Linux.
Более подробные сведения о функциональности
перечисленных классов VCL и RTL содержатся в гл. 2.
Для обеспечения работоспособности кроссплатформенных
классов CLX применяется динамическая библиотека
Qt. Для использования ее методов в классах CLX
в составе Delphi имеется заголовочный файл Qt.pas.
При создании объекта CLX конструктором
create в исходном коде или переносом компонента
на форму автоматически создается специальный объект
— widget. Widget связан с объектом
CLX, обеспечивает взаимодействие объекта CLX с операционной
системой и уничтожается вместе с ним.
Однако widget
может быть создан и напрямую. Такая ситуация может возникнуть,
к примеру, при создании собственных компонентов. Для
этого применяется функция QWidget_Create
динамической библиотеки Qt. В
этом случае widget не привязан
к объекту CLX и, соответственно, не уничтожается вместе
с ним.
|