Графический интерфейс пользователя.

Создание SDI- и MDI-приложений

Kylix позволяет создавать приложения двух моделей пользовательского интерфейса:

В MDI-приложении в главном родительском окне может располагаться более чем одно дочернее окно или документ Такая форма наиболее часто используется в приложениях электронных таблиц или текстовых процессорах. В SDI-приложении, напротив, может содержаться только один документ или может быть активным всего одно окно. Для того чтобы приложение имело вид SDI, необходимо установить свойство FormStyle для формы приложения в fsNormal.

Примечание

По умолчанию свойство FormStyle у формы нового приложения устанавливается в fsNormal.

Для создания нового SDI-приложения выполните следующие шаги:

1. Выберите в главном меню Kylix пункт File/New. Появится диалоговое окно New Items (рис. 10.1).

10-06-1.jpg

Рис. 10.1. Диалоговое окно New Items

2. Щелкните на пиктограмме Application.

3. Нажмите кнопку ОК.

Для создания нового MDI-приложения выполните следующие шаги:

1. Выберите в главном меню Kylix пункт File/New для вызова диалогового окна New Items.

2. Выберите в диалоговом окне вкладку Projects и щелкните на пиктограмме MDI Application (рис. 10.2).

3 Нажмите кнопку ОК.

10-06-2.jpg

Рис. 10.2. Вкладка Projects

В MDI-приложении главная форма содержит несколько дочерних форм, которые могут размещаться внутри главной, но не могут выходить за ее пределы. Для определения, какая форма будет главной, а какая дочерней, установите свойство FormStyle каждой из форм в следующие значения:

При создании MDI-приложения Kylix делает большую часть работы за программиста. Если вы выполнили вышеперечисленные шаги для создания MDI-приложения, то можете видеть, что Kylix уже создал главную форму (рис. 10.3).

10-06-3.jpg

Рис. 10.3. Главная форма MDI-приложения

Более того, данная форма имеет необходимые компоненты для работы со многими дочерними окнами, а также главное меню для работы с файлами и окнами. Кроме того, меню содержит пункт Edit для работы с текстом. Таким образом, Kylix уже сделал для нас простейший многооконный текстовый редактор. Естественно, вы можете самостоятельно расширить его функциональность либо удалить ненужные компоненты.

10-06-4.jpg

Рис. 10.4. Три расположенных рядом дочерних окна внутри главной формы

Запустите эту форму и попробуйте создать новые дочерние окна с помощью пункта меню File/New или нажатия на соответствующую пиктограмму панели инструментов. Вы можете создать несколько файлов и располагать их каскадом, рядом и другими способами, с помощью нажатия на соответствующие пиктограммы панели инструментов (рис. 10.4).

Для поддержания всей этой функциональности Kylix создал специальный код, который размещен в модуле clxmain (листинг 10.6).

Листинг 10.6.Код,автоматически создаваемой для MDI-приложения

unit clxmain; 
interface
uses SysUtils, Classes, QForms, OImgList , QStdActns, QActnList , QDialogs, QMenus, QTypes, QComCtrls, QControls, QExtCtrls;
type
TMainForm - class(TForm) MainMenu1: TMainMenu; File1: TMenuItem; FileNewItem: TMenuItem; FileOpenItem; TMenuItem; FileCloseItem: TMenuItem; Window1: TMenuItem; Help1: TMenuItem; N1: TMenuItem; FileExitItem: TMenuItem; WindowCascadeItem: TMenuItem; WindowTileItem: TMenuItem; HelpAboutItem: TMenuItem; OpenDialog: TOpenDialog; FileSaveItem: TMenuItem; FileSaveAsItem: TMenuItem; Edit1: TMenuItem; CutItem: TMenuItem; CopyItem: TMenuItem; PasteItem: TMenuItem;
WindowMinimizeItem: TMenuItem; StatusBar: TStatusBar; ActionList1: TActionList; EditCut1: TEditCut; EditCopy1: TEditCopy; EditPaste1: TEditPaste; FileNew1: TAction; FileSave1: TAction; FileExit1: TAction; FileOpen1: TAction; FileSaveAs1: TAction; WindowCascade1: TWindowCascade; WindowMinimizeAll1: TWindowMiniraizeAll; HelpAbout1: TAction; FileClose1: TWindowClose; WindowTileItem2: TMenuItem; ToolBar2: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton4: TToolButton; ToolButton5: TToolButton; ToolButton6: TToolButton; ToolButton9: TToolButton; ToolButton7: TToolButton; ToolButton8: TToolButtun; ToolButton10: TToolButton; ToolButton11: TToolButton; WindowClose1: TWindowClose; WindowTile1: TWindowTile; ToolButton12: TToolButton; ImageList1: TImageList;
procedure FileNew1Execute(Sender: TObject); procedure FileOpen1Execute(Sender: TObject); procedure HelpAbout1Execute(Sender: TObject); procedure FileExit1Execute(Sender: TObject); private
{ Private declarations}

procedure CreateMDIChild(const Name: string); public
{ Public declarations } end;
var
MainForm: TMainForm; implementation
{$R *.xfm}
uses clxchildwin, clxabout;
procedure TMainForm.CreateMDIChild(const Name: string); var
Child: TMDIChild; begin { создание нового дочернего MDI-окна },
Child := TMDIChild.Create(Application);
Child.Caption := Name;
if FileExists(Name) then Child.Memo1.Lines.LoadFromFile(Name); end;
procedure TMainForm.FileNew1Execute(Sender: TObject); begin
CreateMDIChild('NONAME' + IntToStr(MDIChildCount + 1)); end;
procedure TMainForm.FileOpen1Execute(Sender: TObject); begin
if OpenDialog.Execute then
CreateMDIChild(OpenDialog.FileName); end;
procedure TMainForm.HelpAbout1Execute(Sender: TObject); begin
AboutBox.ShowModal; end;
procedure TMainForm.FileExit1Execute (Sender: TObject); begin
Close; end; end.

Hosted by uCoz