如何在TMemo中获取文本位置(以像素为单位)?

时间:2019-01-26 18:09:49

标签: delphi winapi scroll memo tmemo

我想获取TMemo中文本(aWord)的像素位置/位置。我的代码是这样的:

var
 Size: TSize;
 Pt: Cardinal;
 aWord: string;
 x, y: Integer;
begin
 ...
 Pt := Perform(EM_POSFROMCHAR, aStart-1, 0);
 Windows.GetTextExtentPoint32(DC, PChar(aWord), aLen, Size);
 x:= Smallint(LoWord(Pt));
 y:= Smallint(HiWord(Pt));

最初它可以正常运行,但是当我向下滚动备忘录时,在最后一行出现了范围检查错误。

向下滚动时如何获得位置?


官方documentation说:

  

如果字符已经被返回,则返回的坐标可以为负。   滚动到编辑控件的工作区之外。该坐标   被截断为整数值。

我不知道该怎么解释。

1 个答案:

答案 0 :(得分:2)

傻。我的主意是“坐标被截断为整数值”-我仍然不知道这是什么意思。我正在尝试转换这些坐标。

解决方案很愚蠢:如果我们得到一个负数,则意味着文本在屏幕之外。我们不会尝试提取/转换Loword和HiWord。我们只是退出该过程。


Pt也应为“ NativeInt”。