Delphi 使窗体Showmodal后可以操作其他窗体

对话框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;

 

字体大小: 中小标准 ->行高大小: 标准

01对话框ShowModal之后不能操作其它窗口,实际上是因为Windows Disable了其它窗口。所以当你需要在模态对话框中访问其它已经可见的窗口时,需要用EnableWindow API来激活对应的窗口。
02
03例如:
04
05form2.showmodal;
06
07在form2的OnShow事件中:
08
09enablewindow(form1.handle,true);
10
11如何使用Show方法来显示一个模态窗口
12
13 
14
15 
16
17  我们知道在Delphi中显示一个窗口有两种方式,模态方式显示(ShowModal)和非模态方式显示(Show),模态方式显示窗口时,必须在自身关闭后才能使父窗口起作用,但有时我们想要实现一个窗口,既要具有模态窗口的特性,但又要能从父窗口中控制它,如显示一个表示处理进行过程的进度框。利用DisableTaskWindows和 EnableTaskWindows 可以达到这一效果。
18
19  下面是演示实现程序:
20
21procedureTForm1.ShowProgressDlg;
22
23var
24
25WindowList:Pointer;
26
27begin
28
29{除了Form2外使所有窗口无效}
30
31WindowList := DisableTaskWindows(Form2.Handle);
32
33try
34
35Form2.Show;
36
37{循环执行任务}
38
39Form2.ProgressBar1.Position :=
40
41Form2.ProgressBar1.Position +1;
42
43{循环结束}
44
45finally
46
47{重新使所有窗口有效}
48
49EnableTaskWindows(WindowList);
50
51Form2.Close;
52
53end;
54
55end;