我想获取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说:
如果字符已经被返回,则返回的坐标可以为负。 滚动到编辑控件的工作区之外。该坐标 被截断为整数值。
我不知道该怎么解释。
答案 0 :(得分:2)
傻。我的主意是“坐标被截断为整数值”-我仍然不知道这是什么意思。我正在尝试转换这些坐标。
解决方案很愚蠢:如果我们得到一个负数,则意味着文本在屏幕之外。我们不会尝试提取/转换Loword和HiWord。我们只是退出该过程。
Pt也应为“ NativeInt”。