Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi_02_11 [2012].doc
Скачиваний:
5
Добавлен:
10.09.2019
Размер:
101.38 Кб
Скачать

Шаг 2. Написание кода для пунктов меню File|Open… и File|Save As…

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

  1. Выберите в меню главной формы пункт File|Open... При этом будет создан обработчик данного пункта и на экране появится окно редактора кода.

  2. Введите необходимый текст, чтобы обработчик выглядел следующим образом:

procedure TMainForm.Open1Click(Sender: TObject);

var

Child: TChild;

begin

if OpenPictureDialog.Execute then

begin

Child:=TChild.Create(Self);

with Child.Image.Picture do

begin

LoadFromFile(OpenPictureDialog.FileName);

Child.ClientWidth:=Width;

Child.ClientHeight:=Height;

end;

Child.Caption:=ExtractFileName(OpenPictureDialog.FileName);

Child.Show;

end;

end;

Этот код, прежде всего, открывает диалог File Open и получает имя файла. Если в диалоговой панели была нажата кнопка Cancel, функция возвращает управление, ничего больше не делая. Если же была нажата кнопка OK, создается новый объект TChild (TChild будет именем дочернего класса MDI, который будет создан позже). Файл с изображением передается компоненту Image дочерней формы; затем её область клиента подгоняется под размер изображения. В завершение свойству Caption присваивается имя выбранного файла, и дочернее окно отображается на экране. В методе OpenClick используется функция ExtratFileName, которая извлекает из свойства компонента FileName только имя файла. В соответствии со строгими правилами для всех объектов, созданных динамически, необходимости вызывать Free. В приведенном только что коде это правило, на первый взгляд, нарушено. В действительности это не так, потому что VCL берет на себя ответственность за освобождение памяти, выделенной для дочерних окон MDI. Обратите внимание, что единственным параметром конструктора TChild является главная форма Self. Он указывает VCL на то, что владельцем дочернего окна MDI является главная форма MDI. При уничтожении главной формы (в момент закрытия приложения) будет автоматически освобождена вся память, занятая дочерними окнами MDI.

  1. Нажмите F12, чтобы перейти обратно к форме. Теперь выберите в меню пункт File|Save As. На экране будет отображен обработчик File|Save As

  2. Введите необходимый код, чтобы обработчик пункта File|Save As выглядел следующим образом:

procedure TMainForm.SaveAs1Click(Sender: TObject);

begin

if SavePictureDialog.Execute then

with ActiveMDIChild as TChild do

Image.Picture.SaveToFile(SavePictureDialog.FileName);

end;

В первых двух строках проверяется, активно ли дочернее окно MDI. Если это так, то отображается диалог File|Save As... После нажатия кнопки OK изображение сохраняется на диске с помощью метода SaveToFile класса TPicture. В приведенном коде используется операция as. Свойство ActiveMDIChild возвращает указатель на объект TForm. Но в данном случае нужен указатель на объект TChild (класс-потомок MDI, производный от TForm), чтобы получить доступ к свойству Image дочерней формы MDI. Операция аs приводит переменную ActiveMDIChild к указателю на TChild. Если по каким-то причинам операция не может выполнить приведение типа, следующий за оператором withas блок кода иногда игнорируется.

  1. Чтобы продолжить, следует сохранить проект. Выберите в главном меню пункт File|Save As... Сохраните Unti1 (это имя Delphi присваивает по умолчанию новому модулю) как PctViewU, а проект – как PictView.

Шаг3. Написание кода для меню Window

  1. Вернитесь обратно к форме, нажав F12. Выберите в меню формы пункт Window|Tile.

  2. Для этого обработчика потребуется ввести всего одну строку кода. Законченный обработчик должен выглядеть следующим образом:

procedure TMainForm.Tile1Click(Sender: TObject);

begin

Tile;

end;

  1. Вернитесь обратно к форме и повторите процесс для пункта Window|Cascade. Законченный обработчик должна выглядеть следующим образом:

procedure TMainForm.Cascade1Click(Sender: TObject);

begin

Cascade;

end;

  1. Выполните аналогичные действия для пункта Window|Arrange All. В тело обработчика должна быть добавлена единственная строка:

ArrangeIcons;

Шаг 4. Создание дочерних форм MDI

Дочерние формы MDI могут оказаться очень простыми. Для них вообще не придется писать код.

  1. Создайте новую форму, нажав на кнопку New Form панели инструментов.

  2. Измените значение свойства Name на Child. Свойство Caption можно игнорировать, поскольку оно будет устанавливаться во время выполнения программы.

  3. Измените значение свойства FormStyle на fsMDIChild. Это необходимо для того, чтобы форма функционировала как дочернее окно MDI.

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

  1. Щелкните на закладке Additional палитры компонентов. Щелкните на кнопке Image и поместите компонент Image в любое место формы.

  2. Измените значение свойства Name на Image.

  3. Измените значение свойства Stretch на True.

  4. Измените значение свойства Align на alClient. Компонент Image будет заполнять всю область клиента формы.

  5. Выберите пункт File|Save и сохраните модуль формы под именем MDIChild.

  6. Переключитесь в окно редактора кода (нажмите F12). Щелкните на закладке PctViewU. Затем выберите в главном меню пункт File|Use Unit, отметьте модуль MDIChild и нажмите кнопку OK. Это нужно для того, чтобы компилятор мог разрешить ссылку на объект TСhild.

  7. Нажмите кнопку Run. Спустя некоторое время программа запустится. Выбирете File|Open… и откройте любой графический файл (с расширением .bmp, .wmf, .ico). Обратите внимание, что дочернее окно изменяет свой размер в зависимости от размера изображения. Откройте несколько файлов и попробуйте опции Cascade и Tile в пункте Window. Если хотите, можете сохранить файл под другим именем, используя пункт File|Save As...

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