2016-11-11 75 views
-1

我們在Delphi 2007應用程序中有一些窗口小部件控件。這些小部件從TWinControl繼承。在小部件上,我們調用TControl方法ManualFloat來取消部件的掛接。德爾福2007 - ManualFloat導致窗口小部件控件浮動高於所有其他窗口

的問題是,當MainFormOnTaskBar是真正的調用ManualFloat可以爲小部件StayOnTop樣的行爲導致其浮動所有窗口,包括其它應用程序之上。這是一個問題,因爲如果你從一個表單打開一個模式對話框,那麼它會出現在這個widget的後面。當MainFormOnTaskBar爲False時,模式對話框將出現在小部件的頂部。

有誰知道我怎麼能不容許該部件成爲最頂層,或至少使人們對一個可能的解決方案/解決辦法一些輕解決這個問題?我的猜測是,這個小部件正在接受Application.MainForm.Handle的處理,這就是我得到這種行爲的原因。

在此先感謝。

+0

你爲什麼猜測*關於親子關係?調試器告訴你什麼時候你通過代碼?如果調試器會干擾這種行爲,那麼當您在代碼中拋出一些OutputDebugString調用時,您會看到什麼?我們如何調試我們看不到的代碼?我們如何重現這個問題? –

+0

** ManualFloat **不是(afaik)任何標準(即盒子中)Delphi VCL控件的屬性,也不是Delphi控件通常被稱爲「小部件」。我懷疑你所描述的是某些第三方或自定義控制庫,因此除非您至少告訴我們您實際處理的是哪個控件庫(或多個控件),否則沒有人能夠提供幫助。 – Deltics

+0

打開DockEx示例。向頂部工具欄添加一個工具按鈕。到它的點擊處理程序:'DockWindows [0] .ManualFloat(Rect(0,0,320,240));'運行程序,點擊「白色」按鈕,停靠白色窗口,按下你添加的按鈕, 「人工浮動」觀察這不是「StayOnTop」 –

回答

0

你試圖迫使你的部件的母公司爲主要形式?

MyWidget.manualFloat(screenpos);  
MyWidget.Parent := MyMainForm; 
MyWidget.ParentWindow := MyMainForm.Handle; 
MyWidget.left := left desired 
MyWidget.Top := Right.desired; 
相關問題