Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Pascal и Delphi / Учебник по Delphi 5 / Создание приложений /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Создание приложения MDI - Программирование от RIN.RU
Создание приложения MDI



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


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


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


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



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

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


    СвойствоЗначение
    Caption
    FormStyle
    Name
    ShowHint
    Image Viewer
    fsMDIForm
    frmMDIParent
    True



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


    СвойствоЗначение
    Align
    Caption
    alTop
    -



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


    СвойствоЗначение
    spbtnLoad.Hint
    spbtnLoad.Left
    spbtnLoad.Top
    spbtnStretch.AllowAlIUp
    spbtnStretch.Grouplndex
    spbtnStretch.Hint
    spbtnStretch.Left
    spbtnStretch.Top
    spbtnCenter.AllowAlIUp
    spbtnCenter.Grouplndex
    spbtnCenter.Hint
    spbtnCenter.Left
    spbtnCenter.Top
    Load
    8
    8
    True
    1
    Stretch
    48
    8
    True
    2
    Center
    80
    8



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


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


    СвойствоЗначение
    Filter
    Name
    Options
    Bitmaps (*.bmp)]*.bmp
    opndlgLoad
    ofPathMustExist,ofFileMustExist]




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



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

  2. Установите следующие ее свойства.
    СвойствоЗначение
    FormStyle
    Name
    Position
    fsMDIChild
    frmMDIChild
    poDefaultPosOnly



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


    СвойствоЗначение
    Align
    Name
    alClient
    imgMain




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


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

  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 15 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  2  3 


 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь