2012-09-09 210 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