對話框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 |
05 |
form2.showmodal; |
06 |
07 |
在form2的OnShow事件中: |
08 |
09 |
enablewindow(form1.handle,true); |
10 |
11 |
如何使用Show方法來顯示一個模態窗口 |
12 |
13 |
|
14 |
15 |
|
16 |
17 |
我們知道在Delphi中顯示一個窗口有兩種方式,模態方式顯示(ShowModal)和非模態方式顯示(Show),模態方式顯示窗口時,必須在自身關閉后才能使父窗口起作用,但有時我們想要實現一個窗口,既要具有模態窗口的特性,但又要能從父窗口中控制它,如顯示一個表示處理進行過程的進度框。利用DisableTaskWindows和 EnableTaskWindows 可以達到這一效果。 |
18 |
19 |
下面是演示實現程序: |
20 |
21 |
procedure TForm1.ShowProgressDlg; |
22 |
23 |
var |
24 |
25 |
WindowList: Pointer; |
26 |
27 |
begin |
28 |
29 |
{除了Form2外使所有窗口無效} |
30 |
31 |
WindowList := DisableTaskWindows(Form2.Handle); |
32 |
33 |
try |
34 |
35 |
Form2.Show; |
36 |
37 |
{循環執行任務} |
38 |
39 |
Form2.ProgressBar1.Position := |
40 |
41 |
Form2.ProgressBar1.Position + 1; |
42 |
43 |
{循環結束} |
44 |
45 |
finally |
46 |
47 |
{重新使所有窗口有效} |
48 |
49 |
EnableTaskWindows(WindowList); |
50 |
51 |
Form2.Close; |
52 |
53 |
end; |
54 |
55 |
end; |
