Графический интерфейс пользователя.
Создание
SDI- и MDI-приложений
Kylix позволяет создавать
приложения двух моделей пользовательского интерфейса:
В MDI-приложении в главном
родительском окне может располагаться более чем одно дочернее окно или документ
Такая форма наиболее часто используется в приложениях электронных таблиц или
текстовых процессорах. В SDI-приложении, напротив, может содержаться только
один документ или может быть активным всего одно окно. Для того чтобы приложение
имело вид SDI, необходимо установить свойство FormStyle
для формы
приложения в fsNormal
.
Примечание
По умолчанию свойство
FormStyle
у формы нового приложения устанавливается вfsNormal
.
Для создания нового SDI-приложения
выполните следующие шаги:
1. Выберите в главном меню
Kylix пункт File/New. Появится диалоговое окно New Items (рис.
10.1).
Рис.
10.1. Диалоговое окно New Items
2. Щелкните на пиктограмме
Application.
3. Нажмите кнопку ОК.
Для создания нового MDI-приложения
выполните следующие шаги:
1. Выберите в главном меню
Kylix пункт File/New для вызова диалогового окна New Items.
2. Выберите в диалоговом
окне вкладку Projects и щелкните на пиктограмме MDI Application (рис.
10.2).
3 Нажмите кнопку ОК.
Рис.
10.2. Вкладка Projects
В MDI-приложении главная
форма содержит несколько дочерних форм, которые могут размещаться внутри главной,
но не могут выходить за ее пределы. Для определения, какая форма будет главной,
а какая дочерней, установите свойство FormStyle
каждой из форм
в следующие значения:
fsMDIForm
— для главной формы; fsMDIChild
— для дочерних форм. При создании MDI-приложения
Kylix делает большую часть работы за программиста. Если вы выполнили вышеперечисленные
шаги для создания MDI-приложения, то можете видеть, что Kylix уже создал главную
форму (рис. 10.3).
Рис.
10.3. Главная форма MDI-приложения
Более того, данная форма
имеет необходимые компоненты для работы со многими дочерними окнами, а также
главное меню для работы с файлами и окнами. Кроме того, меню содержит пункт
Edit для работы с текстом. Таким образом, Kylix уже сделал для нас простейший
многооконный текстовый редактор. Естественно, вы можете самостоятельно расширить
его функциональность либо удалить ненужные компоненты.
Рис.
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.