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

Delphi 如何获取TWinControl(如TSynEdit)的水平和垂直滚动条位置?,delphi,delphi-xe8,synedit,Delphi,Delphi Xe8,Synedit,在Delphi中,在许多TWinControl子体中,例如在我的示例中,TSynEdit控件,我将如何读取水平和垂直滚动条的位置 我一直在搜索我的特定控件的源代码,以及TWinControl的基类文档,但没有找到它 是否有特定于VCL的通用方法来执行此操作,还是应该通过Win32 API调用执行此操作?此函数是获取任何控件的滚动条位置的方法。必须传递控件的句柄、一个OBJID\u VSCROLL或OBJID\u HSCROLL值和一个结构来返回数据 检查一下这个样品 var LBarInfo:

在Delphi中,在许多TWinControl子体中,例如在我的示例中,TSynEdit控件,我将如何读取水平和垂直滚动条的位置

我一直在搜索我的特定控件的源代码,以及TWinControl的基类文档,但没有找到它

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

此函数是获取任何控件的滚动条位置的方法。必须传递控件的句柄、一个
OBJID\u VSCROLL
OBJID\u HSCROLL
值和一个结构来返回数据

检查一下这个样品

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;

您是否尝试过使用该功能?是的,对于我来说,无论是OBJID_客户端还是OBJID_HSCROLL,都不起作用,但可能我做得不对
如果GetScrollBarInfo(SynEditCtrl.Handle,Integer(OBJID_CLIENT),SB),那么…
返回false。我可以使用
SynEditCtrl.LeftChar
非常接近,如果水平滚动位置一直向左,它将为0。这对我来说很有效,必须是正确的,RRUZ。就我的情况而言,一定有些奇怪。也许你不能在WM_PAINT的上下文中称之为此。我认为如果我把这个问题改为“任何TWinControl”,这将是一个更好的问题,因为我在这里没有看到任何这样的问题。你的回答很好。你可以贴出来。我没有看到这个问题的任何重复。在我非常奇怪的情况下,我发现我需要在特定TWinControl的所有者绘制绘制事件之外的某个时间执行此操作。