如何获取TSynEdit等TWinControl的水平和垂直滚动条位置?

How do I get the horizontal and vertical scroll bar position of TWinControl such as TSynEdit?

在 Delphi 中,在许多 TWinControl 后代中,例如在我的确切情况下,TSynEdit 控件,我将如何读取水平和垂直滚动条的位置?

我一直在寻找我的特定控件的源代码,以及 TWinControl 的基础 class 文档,但无法弄明白。

是否有通用的 VCL 特定方法来执行此操作,或者我应该通过 Win32 API 调用来执行此操作?

GetScrollBarInfo function is the way to get the scrollbars position of any TWinControl. You must pass the handle of the control, an OBJID_VSCROLL or OBJID_HSCROLL value and a SCROLLBARINFO 结构到 return 数据。

检查这个样本

var
 LBarInfo: TScrollBarInfo;
begin
 LBarInfo.cbSize := SizeOf(LBarInfo);
 if GetScrollBarInfo(SynEdit1.Handle, Integer(OBJID_VSCROLL), LBarInfo) then
  ShowMessage(Format('Left %d Top %d Height %d Width %d', [LBarInfo.rcScrollBar.Left, LBarInfo.rcScrollBar.Top, LBarInfo.rcScrollBar.Height, LBarInfo.rcScrollBar.Width]));
end;