3

我有一个从 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;

第一个功能有什么问题?

4

1 回答 1

7

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

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

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

于 2012-09-09T16:14:30.800 回答