对话框 ShowModal 之后不能操作其它窗口 ,实际上是因为 Windows Disable 了其它窗口。所以当你需要在模态对话框中访问其它已经可见的窗口时 ,需要用 EnableWindow API 来激活对应的窗口。
例如 :
form2.showmodal;
在 form2 的 OnShow 事件中 :
enablewindow(form1.handle,true);
如何使用 Show 方法来显示一个模态窗口
我们知道在 Delphi 中显示一个窗口有两种方式 ,模态方式显示 (ShowModal) 和非模态方式显示 (Show),模态方式显示窗口时 ,必须在自身关闭后才能使父窗口起作用 ,但有时我们想要实现一个窗口 ,既要具有模态窗口的特性 ,但又要能从父窗口中控制它 ,如显示一个表示处理进行过程的进度框。利用 DisableTaskWindows 和 EnableTaskWindows 可以达到这一效果。
下面是演示实现程序 :
procedure TForm1.ShowProgressDlg;
var
WindowList: Pointer;
begin
{ 除了 Form2 外使所有窗口无效 }
WindowList := DisableTaskWindows(Form2.Handle);
try
Form2.Show;
{ 循环执行任务 }
Form2.ProgressBar1.Position :=
Form2.ProgressBar1.Position + 1;
{ 循环结束 }
finally
{ 重新使所有窗口有效 }
EnableTaskWindows(WindowList);
Form2.Close;
end;
end;
欢迎转载,但请保留出处,本文章转自[华软源码],原文链接:http://www.hur.cn/special/delphiProgram/07546.htm
本文介绍了如何在Delphi中使用Show和ShowModal方法显示窗口,并通过DisableTaskWindows和EnableTaskWindows API实现模态窗口与非模态窗口之间的交互,演示了一个进度条窗口的实例。
1673

被折叠的 条评论
为什么被折叠?



