2011-06-07 51 views
6

這是我的問題。使用Delphi XE的多模態對話框問題

我有主應用程序運行並打開一個模態對話框1,此時主應用程序屏幕被禁用,並且所有焦點都集中在新的對話框1上。

從此對話框1打開另一個模式對話框2。所以現在主屏幕和對話框1被禁用,並且這個對話框2具有所有的焦點。到目前爲止完美。

現在,當我關閉這個頂級dialog2時,我希望它只是跳回到dialog1。它專注於dialog1,但它現在啓用了主應用程序,您可以單擊任何位置來發送dialog1,但將其保持打開狀態。這會導致1%的時間出現問題,即用戶不會立即關閉dialog1並單擊鼠標左鍵。正如你可以想象的QA不喜歡這樣; o)

它看起來像Windows有點混亂,因爲主應用程序似乎知道它仍然打開dialog1,因爲功能區上的按鈕仍然處於關閉狀態。

任何想法?

我已經成功至今是設定明確的最好:

dialog1.PopupMode := pmExplicit; dialog1.PopupParent := MainFrm;

這似乎保持dialog1 ontop的主要應用程序,當您關閉dialog2即使你點擊主應用程序。所以這將鼓勵用戶關閉它,但不是100%正確的。

編輯:我自從創建了一個獨立的應用程序,它的功能如預期。在關閉窗口時,當dialog1關閉時,控制和焦點從dialog2返回到dialog1,然後返回到主應用程序。建議的其他事情正在我們的色帶代碼中找不到。哼!

+2

通常的嫌疑人應該是Application.ProcessMessages或其他啓動並行消息循環的其他東西。 – 2011-06-08 15:41:52

+0

如果您對原生的Delphi TRibbon不滿意,請查看Erik van Bilsen的[Windows Ribbon Framework](http://www.bilsen.com/windowsribbon/index.shtml)。 – menjaraz 2011-12-19 06:20:48

+0

嗨。這可能是很多工作,但我建議不要使用ShowMessage()或MessageDlg(),創建一個新窗體並在窗體中顯示任何想要的消息(甚至可以在方法/函數內部做這些,使得它不是很多),通過這樣做,您可以使用ModalResult函數來處理特定於實例的表單(myForm:= TForm1.Create(); if Myform.ShowModal = MrOk then {call second form etc etc ...})希望這幫助 – 2014-04-15 13:22:01

回答