2

我想在 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));

最初它工作正常,但是当我向下滚动备忘录时,我在最后一行收到范围检查错误。

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


官方文档说:

如果字符已滚动到编辑控件的客户区域之外,则返回的坐标可能为负数。坐标被截断为整数值。

我不知道如何解释这个。

4

1 回答 1

2

愚蠢的。我的思绪停留在“坐标被截断为整数值”上——我仍然不知道这是什么意思。我试图转换这些坐标。

解决方法很傻:如果我们得到一个负数,就意味着文本在屏幕之外。我们不会尝试提取/转换 Loword 和 HiWord。我们只需退出程序。


Pt 也应该是“NativeInt”。

于 2019-01-26T18:34:41.920 回答