【发布时间】:2019-01-26 18:09:48
【问题描述】:
我想在 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说:
如果字符已经被返回,则返回的坐标可以是负数 滚动到编辑控件的客户区之外。该坐标 被截断为整数值。
我不知道如何解释。
【问题讨论】:
-
LoWord和HiWord将DWORD的一半视为无符号数字并返回 0 到 65535 范围内的值。将大于 32767 的值分配给Smallint时会出现范围错误。您可以通过直接将LoWord分配给x来更正此问题,并手动更正:if x > 32767 then x = x - 65536;。
标签: delphi winapi scroll memo tmemo