一個簡單的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)生一個OnClick處理事件;
5、為此事件添加代碼如下:
procedure TMainForm.About1Click(Sender: TObject); begin AboutBox.ShowModal; end;
現(xiàn)在運行它,點擊Run按鈕,試一試Help菜單的About選項,運行效果如下:
六、進(jìn)一步完善程序
此時這個程序已經(jīng)可以運行了,但它不等于就沒有值得完善的地方。
對于這個程序還有兩個問題需要值得注意,它們?nèi)菀谆煜,首先,?dāng)啟動該程序時,會顯示一個空白MDI子窗口,這是因為Delphi應(yīng)用程序會自動建立所有窗體。我們可以從自動產(chǎn)生的清單中刪除MDI子窗體。
1、從Delphi主菜單中選擇【Project | Options…】,將顯示Project Option對話框;
2、點擊Forms標(biāo)簽,其中“Auto-create forms”中顯示的就是所有會自動創(chuàng)建產(chǎn)生的窗體清單;
3、點擊其中不想要自動創(chuàng)建的窗體Child,選擇 >按鈕,就會從自動創(chuàng)建列表中刪除該子窗口,并把它放置到“Available forms”列表中。
再次運行此程序,這一次將不顯示空白MDI子窗體。
Caution
如果要從自動產(chǎn)生清單中刪除一個窗體,就必須保證在用它之前要建立一個專門的窗體,如果不建立一個窗體,指向窗體的指針就不能初始化,這就意味著還沒有為此指針賦一個有意義的值(記住指針是由Delphi自動產(chǎn)生)。試圖用這個指針,其結(jié)果將會產(chǎn)生一個非法錯誤,當(dāng)從自動產(chǎn)生清單中刪除一個窗體后,就必須負(fù)責(zé)在用它之前建立它。
還有一個問題,就是在MDI窗體上點擊關(guān)閉按鈕時,發(fā)現(xiàn)子窗口并沒有關(guā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)存,這時點擊MDI子窗體關(guān)閉按鈕就可以正常關(guān)閉了。
4、再次運行此程序,證明此程序的表現(xiàn)與前面所述的一樣。