一個(gè)簡單的MDI示范程序(Delphi)
最為一個(gè)鞏固之前有關(guān)窗體和對(duì)象的有關(guān)知識(shí),下面就建立一個(gè)簡單的MDI示范程序,這個(gè)程序的功能是打開和保存圖形文件(包括位圖、圖標(biāo)等),為了完成這個(gè)任務(wù),我們有一個(gè)大概的計(jì)劃,計(jì)劃內(nèi)容如下:
(1)建立主窗體(一個(gè)MDI父窗體),包括菜單。
(2)為【File | Open…】 和【File | Save…】菜單選項(xiàng)編寫代碼。
(3)為Windows菜單上的Cascade、Tile和Arrange All選項(xiàng)編寫代碼。
(4)建立MDI子窗體。
(5)建立一個(gè)About對(duì)話框。
(6)然后再回憶和欣賞一下這段工作。
時(shí)間就是金錢,即刻就做吧 。
一、創(chuàng)建主窗口窗體
首先創(chuàng)建一個(gè)主窗口窗體,一個(gè)MDI應(yīng)用程序的主窗口的FormStyle屬性必須設(shè)置為fsMDIForm。不但要為應(yīng)用程序增加File Open和 File Save 對(duì)話框,還要增加一個(gè)菜單。
1、啟動(dòng)Delphi,并從主菜單選擇【File | New | Application】;
2、把主窗體的Name屬性設(shè)置為MainForm;
3、把Caption屬性設(shè)置為Picture Viewer;
4、把FormStyle屬性設(shè)置為fsMDIForm;
好了,下面為此窗體增加一個(gè)菜單,利用Delphi特性,引進(jìn)一個(gè)預(yù)定義菜單,具體如下:
1、點(diǎn)擊組件選項(xiàng)板的Standard標(biāo)簽,并點(diǎn)擊MainMenu按鈕;
2、把MainMenu組件點(diǎn)擊放置到窗體上,具體放到哪個(gè)地方無所謂了,因?yàn)樵谶\(yùn)行階段,代表菜單的圖標(biāo)只是占地方而不顯示,這是非可視化組件。
3、把MainMenu組件Name屬性改為MainMenu;
4、雙擊MainMenu組件,就會(huì)出現(xiàn)Menu Designer對(duì)話框;
5、在MainMenu上點(diǎn)擊鼠標(biāo)右鍵,選擇“Insert From Template…”,將出現(xiàn)Insert Template對(duì)話框;
6、選擇“MDI Frame Menu”并點(diǎn)擊OK,此菜單將顯示在Menu Designer上,關(guān)閉Menu Designer窗口。
現(xiàn)在又回到了主窗體,注意現(xiàn)在窗體上多了一條菜單,此時(shí)先不要點(diǎn)擊任何子菜單項(xiàng),我們先準(zhǔn)備File Open對(duì)話框和File Save對(duì)話框:
1、點(diǎn)擊組件選項(xiàng)板的Dialogs標(biāo)簽,選擇Open Picture Dialog組件,并把它放到窗體上,這也是一個(gè)非可視組件。
2、把Open對(duì)話框的Name屬性改為OpenPictureDialog;
3、把Open對(duì)話框的Title屬性改為“Open a Picture for Viewing”;
4、在窗體再增加一個(gè)Save Picture Dialog組件;
5、把此組件的Name屬性改為“SavePictureDialog”,把Title屬性改為“Save a Picture”;
此時(shí)窗體看起來應(yīng)該像下圖:
二、編寫【File | Open…】和【File | Save As…】菜單選項(xiàng)代碼
下面就準(zhǔn)備開始編寫代碼,Delphi提供了一種很好地編寫菜單處理程序的方法,從而使遇到的麻煩最小。還不要建立MDI子窗體,但要充分了解它,并用它來為菜單處理程序編寫代碼,記住在建立MDI子窗體之前一直不要編譯應(yīng)用程序(因?yàn)檫沒有建立MDI子窗體,編譯會(huì)出現(xiàn)錯(cuò)誤的)
1、在主窗體上選擇【File | Open…】菜單項(xiàng),這樣就會(huì)在Code Editor中為此菜單項(xiàng)建立一個(gè)事件處理程序。
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;