VertScrollBar.Visible始终返回TRUE

时间:2012-09-09 15:56:47

标签: delphi

我有一个从TScrollBox派生的自定义控件。在运行时,我需要知道天气垂直滚动条是否可见。如果我询问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;

第一个功能出了什么问题?

1 个答案:

答案 0 :(得分:7)

读取滚动条Visible属性只会检索VCL控件状态。该属性不会从实际滚动条窗口中检索当前状态。请改用IsScrollBarVisible属性。

使用IsScrollBarVisible方法来检查滚动条是否可见,因为可以滚动滚动窗口。

读取Visible属性只会检索其可见性设置的缓存值(可以是否可见)。对于可滚动窗口,该属性不会从实际窗口中检索当前状态。