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