| 導購 | 订阅 | 在线投稿
分享
 
 
 

Delphi MDI應用程序高級技巧三則(一)

來源:互聯網網民  2006-01-31 23:49:56  評論

Delphi MDI應用程序高級技巧三則(一)http://www.netgocn.com

本文介紹幾個Delphi MDI應用程序的編程技巧,雖然純屬技巧,但是本文的方法在正常編程時,通常會被編譯器認爲是錯誤的或是違背編程環境缺省許可值的。不過有時爲了一些特殊的用途或特殊的視覺效果,按下述的方法一試,可以在明知不可違而違之的情況下,得到很好的結果。

下述各示例均在Delphi6、Windows2000下完成,對涉及的控件命名是任意的,僅爲方便說明問題。

一、子窗口的隱藏

在Delphi編程環境下,MDI子窗口在運行期間可以動態地被創建和銷毀,但是不能夠被隱藏,如果試圖通過Visible屬性或Hide方法隱藏子窗口,編譯器將報出“Cannot hide an MDI Child Form.”的錯誤提示!

如果某個子窗口中承載了很多要保留的數據而不能銷毀,但又暫時不想要它出現在屏幕上時,最好的方法就是將其隱藏,待需要時再將其顯示出來則可。下面兩種方法可以隱藏和顯示子窗口,並避開了編譯器的報錯提示。

1) 使用Windows API函數ShowWindow(),示例代碼如下:

ShowWindow(ChildForm.Handle, SW_HIDE); // 隱藏子窗口

ShowWindow(ChildForm.Handle, SW_RESTORE); // 顯示子窗口

說明:使用Windows API直接隱藏子窗口,其子窗口的Visible屬性和其顯示狀態是不一至的。當子窗口不可見時,其Visible屬性可能仍然是True。

2) 直接設置子窗口的Visible屬性

此時,首先要在需要隱藏的子窗口中重載TCustomForm的VisibleChanging方法,並在其實現過程中屏蔽掉繼承代碼,否則編譯器將在隱藏子窗口時報錯。

然後就可以直接設置這個子窗口的Visible屬性爲False或True來隱藏或顯示它了。示例如下:

a) 子窗口部分

type

TChildForm = class(TForm)

private

procedure VisibleChanging; override;//重載

end;

procedure TChildForm.VisibleChanging;

begin

{使用組件屬性隱藏子窗口時,需要重載此過程,並且不執行任何繼承代碼,否則將報錯}

//inherited; 不能執行此語句!

end;

b) 隱藏或顯示子窗口

ChildForm.Visible:=false;//隱藏子窗口

ChildForm.Visible:=true; //顯示子窗口

說明:直接使用組件屬性隱藏或顯示子窗口,子窗口的Visible屬性和其顯示狀態是一至的。筆者認爲這樣做要安全一些。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
Delphi MDI應用程序高級技巧三則(一)[url=http://www.netgocn.com]http://www.netgocn.com[/url] 本文介紹幾個Delphi MDI應用程序的編程技巧,雖然純屬技巧,但是本文的方法在正常編程時,通常會被編譯器認爲是錯誤的或是違背編程環境缺省許可值的。不過有時爲了一些特殊的用途或特殊的視覺效果,按下述的方法一試,可以在明知不可違而違之的情況下,得到很好的結果。 下述各示例均在Delphi6、Windows2000下完成,對涉及的控件命名是任意的,僅爲方便說明問題。 一、子窗口的隱藏 在Delphi編程環境下,MDI子窗口在運行期間可以動態地被創建和銷毀,但是不能夠被隱藏,如果試圖通過Visible屬性或Hide方法隱藏子窗口,編譯器將報出“Cannot hide an MDI Child Form.”的錯誤提示! 如果某個子窗口中承載了很多要保留的數據而不能銷毀,但又暫時不想要它出現在屏幕上時,最好的方法就是將其隱藏,待需要時再將其顯示出來則可。下面兩種方法可以隱藏和顯示子窗口,並避開了編譯器的報錯提示。 1) 使用Windows API函數ShowWindow(),示例代碼如下: ShowWindow(ChildForm.Handle, SW_HIDE); // 隱藏子窗口 ShowWindow(ChildForm.Handle, SW_RESTORE); // 顯示子窗口 說明:使用Windows API直接隱藏子窗口,其子窗口的Visible屬性和其顯示狀態是不一至的。當子窗口不可見時,其Visible屬性可能仍然是True。 2) 直接設置子窗口的Visible屬性 此時,首先要在需要隱藏的子窗口中重載TCustomForm的VisibleChanging方法,並在其實現過程中屏蔽掉繼承代碼,否則編譯器將在隱藏子窗口時報錯。 然後就可以直接設置這個子窗口的Visible屬性爲False或True來隱藏或顯示它了。示例如下: a) 子窗口部分 … type TChildForm = class(TForm) private procedure VisibleChanging; override;//重載 … end; … procedure TChildForm.VisibleChanging; begin {使用組件屬性隱藏子窗口時,需要重載此過程,並且不執行任何繼承代碼,否則將報錯} //inherited; 不能執行此語句! end; b) 隱藏或顯示子窗口 ChildForm.Visible:=false;//隱藏子窗口 ChildForm.Visible:=true; //顯示子窗口 說明:直接使用組件屬性隱藏或顯示子窗口,子窗口的Visible屬性和其顯示狀態是一至的。筆者認爲這樣做要安全一些。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有