天天看點

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;

繼續閱讀