Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DLab8_Стиль MDI.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
117.25 Кб
Скачать

Пример mdi-приложения

В этом разделе мы расширим возможности созданной ранее программы просмотра изображений.

Создание интерфейса

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

  1. Выберите команду File/New Application, и появится пустое приложение.

  2. Установите следующие свойства.

Свойство Значение

Caption Image Viewer

FormStyle fsMDIForm

Name frmMDIParent

ShowHint True

  1. Поместите компонент TPanel в форму. Установите следующие его свойства.

Свойство                                          Значение

Align                                                    alTop

Caption                                                -

  1. Поместите три компонента TSpeedButton в TPanel и назовите их spbtnLoad, spbtnStretch и spbtnCenter. Установите следующие их свойства.

Свойство                                          Значение

spbtnLoad.Hint                                   Load

spbtnLoad.Left                                    8

spbtnLoad.Top                                    8

spbtnStretch.AllowAlIUp                   True

spbtnStretch.Grouplndex                      1

spbtnStretch.Hint                                  Stretch

spbtnStretch.Left                                  48

spbtnStretch.Top                                  8

spbtnCenter.AllowAlIUp                      True

spbtnCenter.Grouplndex                       2

spbtnCenter.Hint                                   Center

spbtnCenter.Left                                   80

spbtnCenter.Top                                   8

Свойства Glyph установите те же, что и для SDI-приложения.

  1. Добавьте в форму компонент TOpenDialog и установите следующие его свойства.

Свойство                                            Значение

Filter                                                     Bitmaps (*.bmp)]*.bmp

Name                                                    opndlgLoad

Options                                                 [ofPathMustExist,ofFileMustExist]

Теперь создадим дочернюю форму.

  1. Выберите из меню File/New Form, и появится пустая форма.

  2. Установите следующие ее свойства.

Свойство                                          Значение

FormStyle                                            fsMDIChild

Name                                                  frmMDIChild

Position                                               poDefaultPosOnly

  1. Поместите компонент TImage во вновь созданную форму и установите его следующие свойства.

Свойство                                         Значение

Align                                                  alClient

Name                                                 imgMain

Удалите дочернюю форму из списка автоматически создаваемых форм следующим образом.

  1. Выберите команду Project/ Options, и появится диалоговое окно Project Options, показанное на рис. 1.

  2. Выберите frmMDIChild в списке Auto-create forms.

  3. Щелкните на кнопке. Форма frmMDIChild при этом будет перенесена в список Available forms.

  4. Щелкните на кнопке ОК.

Теперь самое время сохранить проект, выбрав команду File/Save Project As. Сохраните Unit1 как MDIParent, а проект — как EgMDIApp.

Написание кода

Создав интерфейс, перейдем к написанию исходного текста приложения, который будет очень похож на код для SDI-приложения.

Сначала загрузим изображение. Введите следующий код в обработчик события OnClick компонента spbtnLoad.

procedure TfrmMDIParent.spbtnLoadClick(Sender: TObject);

begin

if opndlgLoad.Execute then

with TfrmMDIChild.Create(Application) do

begin

Caption:= opndlgLoad.FileName;

imgMain.Picture.LoadFromFile(opndlgLoad.FileName);

ClientWidth:= imgMain.Picture.Width;

ClientHeight:= imgMain.Picture.Height;

end;

end;

После запуска диалогового окна создается новый экземпляр дочерней формы и загружается файл изображения. После загрузки размеры дочерней формы изменяются так, чтобы можно было видеть все изображение.

Еще пара штрихов— и приложение заработает, как и предусматривалось. Поскольку модуль ссылается на тип TfrmMDIChild, находящийся в модуле MDIChild, после строки implementation следует добавить еще одну строку:

uses MDIChild;

Теперь можно приступить к компиляции и запуску приложения. Однако заметьте, что, когда вы щелкаете на кнопке Close, дочерняя форма не закрывается, а сворачивается в пиктограмму. Чтобы заставить ее закрыться, следует добавить в код обработчика OnClose класса TfrmMDIChild маленькую деталь— изменить свойство Action:

Action:= caFree;

Компоненты TSpeedButton Stretch и Center выполняют те же функции, что и в SDI-приложении, однако их обработчики события OnClick следует изменить следующим образом

if not (ActiveMDIChild = Nil) then

if ActiveMDIChild is TfrmMDIChild then

TfrmMDIChild(ActiveMDIChild).imgMain.Stretch:= spbthStretch.Down;

и

if not (ActiveMDIChild = Nil) then

if ActiveMDIChild is TfrmMDIChild then

TfrmMDIChild(ActiveMDIChild).imgMain.Center:= spbthCenter.Down;

Остается последняя проблема — состояния кнопок Stretch и Center одинаковы для всех дочерних форм Для решения этой задачи добавьте в обработчик события OnActivate класса TfrmMDIChild строки.

frmMDIParent.spbtnStretch.Down:= imgMain.Stretch;

frmMDIParent.spbtnCenter.Down:= imgMain.Center;

И, наконец, самый последний из последних штрихов— в модуле MDIChild добавьте после строки implementation строку.

uses MDIParent;

Компилируйте, запускайте и смотрите. MDI-приложение создано!

ПРЕДОСТЕРЕЖЕНИЕ: В этом примере присвоение нового значения свойству Down класса TSpeedButton вызывало событие Оn-click. Будьте осторожны при написании кода обработчика события, который генерирует новое событие путем присвоения значения свойству, ведь при этом можно создать бесконечную рекурсию. 

Задания на разработку

1. Создайте просмотрщик графических файлов в стиле MDI. Пример разобран подробно в этой лабораторной работе.

2. Cоздайте текстовый редактор в стиле MDI с инструментальной панелью.

3. Создайте приложение, позволяющее вводить и выводить данные о ваших сокурсниках (ФИО, дату, место рождения, рост, вес, место жительства, телефон). Ввод данных о человеке оформить в отдельном окне. Сохранение и считывание данных произвести в помощью компонента TMemo.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]