一個(gè)簡單的MDI示范程序(Delphi)
1、將建立好的About窗體的Name屬性設(shè)置為AboutBox,BorderStyle屬性設(shè)置為bsDialog
2、以PVAboutU保存此About對話框窗體單元;
3、切換到Code Editor中的PctViewU標(biāo)簽,從Delphi主菜單選擇【File | Use Unit】將PVAboutU單元包含近來;
4、按F12切換到MainForm主窗體,從菜單上選擇【Help | About】,這樣就產(chǎn)生一個(gè)OnClick處理事件;
5、為此事件添加代碼如下:
procedure TMainForm.About1Click(Sender: TObject); begin AboutBox.ShowModal; end;
現(xiàn)在運(yùn)行它,點(diǎn)擊Run按鈕,試一試Help菜單的About選項(xiàng),運(yùn)行效果如下:
六、進(jìn)一步完善程序
此時(shí)這個(gè)程序已經(jīng)可以運(yùn)行了,但它不等于就沒有值得完善的地方。
對于這個(gè)程序還有兩個(gè)問題需要值得注意,它們?nèi)菀谆煜,首先,?dāng)啟動該程序時(shí),會顯示一個(gè)空白MDI子窗口,這是因?yàn)镈elphi應(yīng)用程序會自動建立所有窗體。我們可以從自動產(chǎn)生的清單中刪除MDI子窗體。
1、從Delphi主菜單中選擇【Project | Options…】,將顯示Project Option對話框;
2、點(diǎn)擊Forms標(biāo)簽,其中“Auto-create forms”中顯示的就是所有會自動創(chuàng)建產(chǎn)生的窗體清單;
3、點(diǎn)擊其中不想要自動創(chuàng)建的窗體Child,選擇 >按鈕,就會從自動創(chuàng)建列表中刪除該子窗口,并把它放置到“Available forms”列表中。
再次運(yùn)行此程序,這一次將不顯示空白MDI子窗體。
Caution
如果要從自動產(chǎn)生清單中刪除一個(gè)窗體,就必須保證在用它之前要建立一個(gè)專門的窗體,如果不建立一個(gè)窗體,指向窗體的指針就不能初始化,這就意味著還沒有為此指針賦一個(gè)有意義的值(記住指針是由Delphi自動產(chǎn)生)。試圖用這個(gè)指針,其結(jié)果將會產(chǎn)生一個(gè)非法錯(cuò)誤,當(dāng)從自動產(chǎn)生清單中刪除一個(gè)窗體后,就必須負(fù)責(zé)在用它之前建立它。
還有一個(gè)問題,就是在MDI窗體上點(diǎn)擊關(guān)閉按鈕時(shí),發(fā)現(xiàn)子窗口并沒有關(guān)閉,而是最小化,因此我們要修改它,使得點(diǎn)擊關(guān)閉后真正被關(guān)閉。
1、在Form Designer中選擇Child子窗體,選中窗體本身,確認(rèn)在Object Inspector的Component Selector中選擇的是Child。
2、雙擊Events頁的OnClose事件,添加代碼如下:
procedure TChild.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
把關(guān)閉動作設(shè)置為caFree,指示VCL關(guān)閉子窗體,并釋放與窗體有關(guān)的內(nèi)存,這時(shí)點(diǎn)擊MDI子窗體關(guān)閉按鈕就可以正常關(guān)閉了。
4、再次運(yùn)行此程序,證明此程序的表現(xiàn)與前面所述的一樣。