2011-01-12 51 views
2

我有一個任務來增強用Borland C++編寫的已有工具,我是編程和C++ builder的新手。其任務是將彈出的消息框集成到主表單本身中,我已經成功完成了該工作,方法是在項目中添加一個新表單並將其替換爲消息框。 我已經使我的新表單模式,以便控制被阻止,直到用戶選擇一個選項。如何在borland C++ builder中創建Modal和無模式表單

現在我添加了另一個名爲graph的圖形來顯示一個圖形,並且我希望控件在用戶單擊新窗體中的一個按鈕時轉到圖形。

是否有辦法讓兩個孩子無模而且只阻止父窗體(模態)。簡而言之,我想訪問我添加到我的項目中的兩個新窗體,並且我不想訪問我的主窗體,直到我用這兩種形式做出所有選擇。一定幫助!

+0

是否有一種方法可以讓子窗體無模式並僅阻止Borland C++構建器中的主窗體(模態)? – Dolly

回答

3

而不是使用ShowModal(),你可以在父窗體的Enabled屬性設置爲false,使用Show()展示兩種形式,然後設置父窗體的Enabled財產回真當這兩種形式都被關閉。

+0

但是,這並不阻止父母的形式運行禮儀?我們如何讓父窗體等待而不顯示對話框? – GuruC

+0

父窗體仍將處理消息(定時器,繪畫等),但用戶在禁用時將無法與其交互。此外,如果您使用的是舊版本的C++ Builder,則可能需要重寫次要窗體的'CreateParams()'方法以將父窗體指定爲父窗體'HWND'(從Win32 API的角度來看,而不是VCL的),所以這些窗口不會消失在父窗體的窗口後面(默認情況下使用'TApplication'窗口作爲父HWND,這允許TForm窗口相互之間改變z順序)... –

+0

...在更新的版本中,'TForm'和'TApplication'具有新的'PopupMode'和'PopupParent'屬性可以更好地控制這個問題。也就是說,您可以將第二個窗體的「PopupParent」屬性設置爲父窗體,然後它們將永遠不會落後於它。 –

0

您可以從OnCreate()方法中移動您不想在create期間自動運行的功能。您可以將它們移動到例如OnClick()。我遇到類似的情況,其中在程序create期間正在運行Show() 方法。我實施了OnActivate()方法,並從那裏調用Show()方法,而不是從OnCreate()