我有一个从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;
第一个功能出了什么问题?
答案 0 :(得分:7)
读取滚动条 Visible
属性只会检索VCL控件状态。该属性不会从实际滚动条窗口中检索当前状态。请改用IsScrollBarVisible
属性。
使用IsScrollBarVisible
方法来检查滚动条是否可见,因为可以滚动滚动窗口。
读取Visible
属性只会检索其可见性设置的缓存值(可以是否可见)。对于可滚动窗口,该属性不会从实际窗口中检索当前状态。