VertScrollBar.Visible始终返回TRUE

WeG*_*ars 3 delphi

我有一个从TScrollBox派生的自定义控件.在运行时,我需要知道天气垂直滚动条是否可见.如果我询问Visible属性,它总是返回true,无论滚动条是否可见!

function TMyScrollPanel.ScrollVisible: boolean;
begin
 Result:=  Self.VertScrollBar.Visible;            <----------- always true
end;
Run Code Online (Sandbox Code Playgroud)

但是,这可以正常工作:

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

第一个功能有什么问题?

Jay*_*Jay 7

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

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

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

  • 实际上它不是属性,而是功能. (3认同)