на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Кроссплатформенное программирование для Linux
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



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.