p align="left">Из-за некоторых различий стандартов пользовательского интерфейса Windows и Linux часть визуальных компонентов CLX имеют несвойственные для Windows дополнительные функции. Большинство компонентов на этих страницах хорошо знакомы разработчикам (правда, некоторые из них перекочевали из других страниц VCL - например TTimer и TSpinEdit). Однако существуют некоторые новинки. Это компоненты TLCDNumber, TTextviewer и TTextBrowser. Их краткая аннотация представлена в таблице 1. Таблица 1 - Уникальные визуальные компоненты CLX |
Компонент | Страница палитры компонентов | Описание | | TLCDNumber | Additional | Компонент отображает совокупность символов (букв и цифр), которые можно представить в режиме цифрового дисплея. Соответственно, не все буквы можно показать в этом компоненте. Например, буквы J, Q, Z и т. д. Строка символов содержится в свойстве Value | | TTextviewer | Common Controls | Компонент является аналогом компонента VCL TRichEdit. Предназначен для редактирования текстов | | TTextBrowser | Common Controls | Компонент развивает возможности компонента TTextviewer, предоставляя функции гипертекстовой разметки | | |
Дополнительные возможности по созданию кроссплатформенных приложений баз данных дают компоненты на страницах Data Access, DataControIs, DBExpress, InterBase. Безусловно, механизмы доступа к данным, используемые такими приложениями, в значительной степени зависят от операционной системы. Поэтому выбор способов доступа к данным сравнительно невелик. 1.4 Сходства и различия визуальных компонентов 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). [4] 2 Особенности программирования для Linux 2.1 Общие сведения Операционные системы Windows и Linux имеют достаточно серьезных различий, чтобы сделать кроссплатформенную разработку делом сложным и кропотливым. В первую очередь необходимо хорошо знать обе операционные системы и иметь опыт работы с ними. Создание исходного кода для кроссплатформенных приложений - это трудоемкий процесс, который усложняется по мере использования специфических возможностей операционных систем. Простейшим путем в данном случае будет применение только стандартных свойств и методов компонентов CLX. Но такой путь возможен для сравнительно несложных приложений. Большинство приложений имеют функции для работы с файлами. Файловые системы Windows и Linux отличаются настолько, что кроссплатформенная реализация любых сложных операций с файлами требует серьезного внимания и усилий. Linux чувствительна к регистру символов в именах файлов и путях, поэтому не стоит использовать в исходном коде имена файлов напрямую, а при необходимости делать это нужно аккуратно. Во многих компонентах для решения проблемы заглавных и строчных букв можно использовать свойство property CaseSensitive: Boolean; После присвоения свойству значения True компонент производит все строковые операции с учетом регистра символов. Для формирования полного пути файла используются константы из модуля SysUtils. Это PathDelim (символ разделителя каталогов в пути файла), DriveDelim (символ логического диска), pathsep (символ разделителя между несколькими путями файлов в одной строке). При работе с текстовыми файлами необходимо помнить о различии управляющих символов в Windows и Linux. Для обозначения конца строки в Windows используются символы CR/LF, а в Linux - только символ LF. В Windows окончание текста определяется символом Ctrl-Z, а в Linux - просто концом файла [4]. Так как в Linux отсутствует системный реестр, то для сохранения настроек приложения используется класс TMeminiFile, обеспечивающий сохранение переменных среды в INI-файле. При создании кроссплатформенных приложений необходимо использовать только свойства и методы классов CLX. В библиотеке CLX также доступны для применения такие важные для написания бизнес-логики приложения классы, как TList, TStringList, TCollection, TAction и др. Если это ограничение является слишком жестким, и в программе требуется использовать функции системных API, применяются директивы условного перехода: {$IFDEF MSWINDOWS} {код для Windows} {$ENDIF} {$IFDEF LINUX} {код для Linux} {$ENDIF} 2.2 Приложения баз данных для Linux Главной составной частью любого приложения баз данных является механизм доступа к данным. Для традиционных приложений баз данных, создаваемых в Delphi, выбор способов доступа к данным достаточно широк. Однако про кроссплатформенные приложения этого сказать нельзя. По существу, разработчик может выбрать только набор компонентов dbExpress. К сожалению, компоненты dbExpress ограничены по своим функциональным возможностям, обеспечивая однонаправленное перемещение курсора и просмотр данных в режиме «только для чтения». Преимуществом этого способа доступа к данным является простота и отсутствие многомегабайтных вспомогательных библиотек. В частности, для каждого из четырех поддерживаемых dbExpress серверов баз данных необходима лишь одна динамическая библиотека Windows и только один разделяемый объект (shared object) Linux [5]. 2.3 Internet-приложения для Linux Для Internet-приложений вполне обычной является ситуация, когда клиентская часть должна работать на компьютерах с различными операционными системами, например Windows и Linux. В этом случае кроссплатформенное программирование клиентской части становится весьма привлекательным способом уменьшения затрат на процесс разработки. В составе библиотеки CLX имеется достаточно большой набор компонентов для разработки Internet-приложений. Однако в Linux можно использовать только сервер Apache или CGI. Это накладывает существенные ограничения на вновь создаваемые кроссплатформенные приложения и требует серьезных усилий при переделке приложений Windows, использующих ISAPI или NSAPI. Заключение Кроссплатформенное программирование стало доступно в Delphi 7 благодаря использованию библиотеки компонентов CLX. Имея общее с библиотекой компонентов VCL ядро базовых компонентов, библиотека CLX обеспечивает совместимость приложений Delphi для Windows и Kylix для Linux. При неизбежных для кроссплатформенного программирования трудностях реализации сложного кода, использующего системные вызовы и технологии удаленного доступа, в Delphi решена задача быстрого визуального проектирования пользовательского интерфейса и создания бизнес - логики приложения. Для этого применяется набор специальных компонентов, имеющих практически идентичную функциональность и схожий программный интерфейс, но их количество значительно отличается от стандартного набора компонентов. Рассмотрены следующие вопросы: состав стандартного проекта CLX и кроссплатформенные элементы Репозитория; CLX - библиотека компонентов кроссплатформенного программирования; иерархия классов CLX, общие свойства и методы компонентов, их отличия от компонентов VCL; особенности кроссплатформенного программирования Windows - Linux; дополнительные возможности кроссплатформенных приложений. Список использованных источников 1. Шупрута, В.В. Delphi 2005. Учимся программировать: NT Press. - М., 2005. 2. Дарахвелидзе, И.В. Программирование в Delphi 7: BHV-СПб. - Санкт-Петербург, 2003. 3. Культин, С.Д. Delphi в задачах и примерах: BHV-СПб. - Санкт-Петербург, 2008. 4. Осипов, О.И. Delphi. Профессиональное программирование: Символ-Плюс. - М., 2006. 5. Фаронов В.В. Delphi4. Учебный курс. - М.: Нолидж, 1999. 6. Возневич Э. «Освой самостоятельно Delphi: Полное руководство для самостоятельного обучения. /Под ред. В. Тимофеева. - М.: Бином, 1996. 7. Гофман В.Э./ Хомоненко А.Д. Delphi 6. - СПБ.: БХВ, 1996. 8. Дарахвелидзе П.Г. Марков Е.П. Delphi - средства визуального программирования. - СПБ.: BHV - С-Петербург, 1996. 9. Конопка Р. Создание оригинальных компонент в среде Delphi: Пер. с англ. - Киев: DiaSoftLtd, 1996. 10. Сван Том. Основы программирования Delphi для Windows 95. Киев: Диалектика, 1996. 11. Зуев В. А.. Turbo Pascal 6.0, 7.0. М.: Веста; Радио и связь, 1998. 12. Коцюбинский А.О., Грошев С.В. Язык программирования Delphi 5 - М.: «Издательство Триумф», 1999. 13. Леонтьев В. Delphi 5 - М.: Москва «Олма-Пресс», 1999. 14. Немнюгин С.А. Программирование - М.: Питер, 2000. 15. Программирование под ред. В.В.Старлова - М: Питер, 1999 16. Ремизов Н. Delphi - М.: Питер, 2000. 17. Справочная система Delphi 5.0 Help. 18. Т.А. Ильина. Программирование на Delphi 6 - М.: Питер, 2000. 19. Фаронов В. В. Delphi 4. Учебный курс. М.: Нолидж, 1999. 20. Федоров А. Г. Создание Windows-приложений в среде Delphi. М.: ТОО «Компьютер Пресс», 1999. 21. Хендерсон К. Руководство разработчика баз данных в Delphi 2. Киев: Диалектика, 1998. 22. Ч. Куписевич. Программирования на Delphi. - М: Киев, 1986 23. Шапошников И. Delphi 5 - М.: Санкт-Петербург, 2001. Приложение А Программа «База данных Games» Приложение Б Исходный код программы «База данных Games» unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DBTables, DB, Grids, DBGrids, StdCtrls; type TForm1 = class(TForm) DataSource1: TDataSource; Table1: TTable; DBGrid1: TDBGrid; Label1: TLabel; GroupBox1: TGroupBox; Button1: TButton; Edit1: TEdit; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if Table1.Locate('Game', Edit1.Text,[loCaseInsensitive, loPartialKey]) then Form1.Label2.Caption:='' else Form1.Label2.Caption:='ничего не найдено.' end; end.
Страницы: 1, 2
|