2012-09-09 114 views
3

我有一個從TScrollBox派生的自定義控件。在運行時,我需要知道垂直滾動條是否可見的天氣。如果我詢問Visible屬性,它總是返回true,無論滾動條是否可見!VertScrollBar.Visible總是返回TRUE

function TMyScrollPanel.ScrollVisible: boolean; 
begin 
Result:= Self.VertScrollBar.Visible;   <----------- always true 
end; 

然而,這正常工作:

function VertScrollBarVisible(WindowHandle: THandle): Boolean;     
begin 
Result:= (GetWindowlong(WindowHandle, GWL_STYLE) AND WS_VSCROLL) <> 0 
end; 

有什麼不對的第一功能?

回答

7

閱讀滾動條 Visible屬性只能檢索VCL控件狀態。該屬性不會從實際的滾動條窗口中檢索當前狀態。改用 IsScrollBarVisible屬性。

改爲使用IsScrollBarVisible方法來檢查滾動條是否可見,因爲可滾動的窗口可以滾動。

讀取Visible屬性僅檢索其可見性設置的緩存值(可以是可見或不可見)。對於可滾動窗口,該屬性將不會從實際窗口中檢索當前狀態。

+0

所以,我猜屬性的名稱應該是'VertScrollBar.NeverShow'而不是'VertScrollBar.Visible':) – Ampere

+0

@Altar,最好是'VertScrollBar.CanShow' ;-) – TLama

+1

@Jay,你能改正嗎請問您的答案?實際上滾動條不是VCL控件... – TLama