2008-08-22 39 views
4

我有一個Delphi 7應用程序有兩個文檔視圖(例如,所見即所得的HTML編輯可能有一個所見即所得的視圖和源視圖 - 不是我真正的應用程序)。它們可以在單獨的窗口中打開,或者停靠在主窗口的選項卡中。多窗體Delphi應用程序和對話框

如果我從其中一個單獨的窗體打開模式對話框,主窗體將顯示在前面,並顯示爲窗口任務欄中的選定窗口。假設主要形式是WYSIWYG視圖,並且源視圖已被刪除。您轉到源視圖中的特定點並插入圖像標記。會出現一個對話框,允許您選擇並輸入圖像所需的屬性。如果所見即所得視圖和源視圖重疊,則所見即所得視圖將被置於前面並且源視圖被隱藏。一旦對話被解散,源視圖就會回到視線內。

我試過設置所有者和ParentWindow屬性的形式,它是關係到:

dialog := TDialogForm.Create(parentForm);
dialog.ParentWindow := parentForm.Handle;

我怎樣才能解決這個問題呢?我還應該嘗試什麼?

鑑於人們似乎在嘲諷我的例子,或許我可以嘗試一個更好的例子:一個文本編輯器,允許您同時打開多個文件。您打開的文件或者在選項卡中(如在Delphi IDE中)或在其自己的窗口中。假設用戶打開拼寫檢查對話框或查找對話框。會發生什麼情況是,如果文件正在自己的窗口中編輯,那麼當顯示模態對話框時,該窗口會按z順序發送到主窗體下方;一旦對話框關閉,它將返回到其原始的z順序。

注意注意:如果您正在使用Delphi 7並尋找解決方案來解決這個問題,請查看我在頁面上的答案,以查看我最終做了什麼。

回答

5

我會使用此代碼...(基本上就是拉爾斯說)

dialog := TDialogForm.Create(parentForm); 
dialog.PopupParent := parentForm; 
dialog.PopupMode := pmExplicit; 
dialog.ShowModal(); 
+0

這有爲我解決了一個長期存在的問題。謝謝。 – 2014-07-10 11:08:52

0

首先,我不完全確定我遵循,您可能需要提供一些額外的細節,以幫助我們瞭解正在發生的事情和問題所在。我想我不確定我是否明白你想要完成什麼,以及問題是什麼。

其次,您不需要設置對話框的父級,因爲這實際上是對Create(傳遞父級)的調用所發生的情況。你所描述的對話聽起來像是可以用一些「重新思考」一點說實話。該對話框是否將源圖像的子圖像或所見即所得窗口的圖像屬性輸入?

1

顯示的對話框是使用ShowModal還是Show?你應該設置你的對話框的PopupMode屬性正確。 pmAuto可能是你最好的選擇。另請參閱您是否需要設置PopupParent屬性。

0

我不知道我很明白你做了什麼,但這裏的一些事情,我可以建議你可以嘗試......不同版本的Delphi之間

  1. 這種行爲變化。我建議,這是由於他們跳過來支持Windows 2007在Delphi 2007中的環節。
  2. 如果您使用的是Delphi 2007,請嘗試從設置Application.MainFormOnTaskBar布爾變量的項目源文件中刪除該行。
  3. 刪除後,您應該可以使用各種Form的BringToFront/SendToBack方法來實現您之後的Z順序。

我懷疑,你發現了什麼已經在this link 當然討論,我可能只是錯過你的觀點完全,所以道歉提前!

3

我最終最終找到了使用Google網上論壇的answer。簡而言之,所有的模式對話框需要具備以下添加到他們:


procedure TDialogForm.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    Params.Style := Params.Style or WS_POPUP; 
    Params.WndParent := (Owner as TWinControl).Handle; 
end; 

我猜這確實拉爾斯相當於和馬呂斯在Delphi 7回答

相關問題