【问题标题】:How do I get the horizontal and vertical scroll bar position of TWinControl such as TSynEdit?如何获取TSynEdit等TWinControl的水平和垂直滚动条位置?
【发布时间】:2015-10-07 17:47:16
【问题描述】:

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

我一直在寻找我的特定控件的源代码和 TWinControl 的基类文档,但无法弄清楚。

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

【问题讨论】:

  • 您是否尝试过使用GetScrollBarInfo 函数?
  • 是的,对我不起作用,无论是 OBJID_CLIENT 还是 OBJID_HSCROLL,但也许我做错了。 if GetScrollBarInfo(SynEditCtrl.Handle, Integer(OBJID_CLIENT), SB) then ... 返回 false。
  • 我可以使用SynEditCtrl.LeftChar 非常接近,如果水平滚动位置一直在左侧,则为 0。
  • 这对我有用pastebin.com/Xwywf04D
  • 那一定是正确的,RRUZ。在我的确切情况下,一定有些奇怪。也许你不能在 WM_PAINT 的上下文中调用它。我认为如果我将其更改为询问“任何 T​​WinControl”,这将是一个更好的问题,因为我在这里看不到任何此类问题。你的回答很好。你可以发布那个。我在 SO 上看不到这个问题的任何重复。

标签: delphi delphi-xe8 synedit


【解决方案1】:

GetScrollBarInfo 函数是获取任何 TWinControl 的滚动条位置的方法。您必须传递控件的句柄、OBJID_VSCROLLOBJID_HSCROLL 值和 SCROLLBARINFO 结构才能返回数据。

检查此示例

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;

【讨论】:

  • 在我非常奇怪的情况下,我发现我需要在特定 TWinControl 的所有者绘制事件期间以外的某个时间执行此操作。
猜你喜欢
  • 1970-01-01
  • 2015-02-15
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
相关资源
最近更新 更多