Delphi MDI应用程序高级技巧三则(一)

王朝delphi·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

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属性和其显示状态是一至的。笔者认为这样做要安全一些。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航