Как получить положение текста (в пикселях) в TMemo? - PullRequest
0 голосов
/ 26 января 2019

Я хочу получить позицию / размещение в пикселях текста (aWord) в TMemo. Мой код примерно такой:

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));

Изначально все работает нормально, но когда я прокручиваю заметку, я получаю ошибку проверки диапазона в последней строке.

Как мне получить позицию при прокрутке вниз?


Официальная документация гласит:

Возвращенная координата может быть отрицательной, если символ был прокручивается за пределами клиентской области элемента управления редактирования. Координаты усекаются до целых значений.

Я не знаю, как это интерпретировать.

1 Ответ

0 голосов
/ 26 января 2019

Глупо. Мой разум застрял на «Координаты усекаются до целочисленных значений» - что я до сих пор не знаю, что это значит. Я пытался преобразовать эти координаты.

Решение глупое: если мы получим отрицательное число, это означает, что текст находится за пределами экрана. Мы не пытаемся извлечь / преобразовать Loword и HiWord. Мы просто выходим из процедуры.


Также Pt должен быть "NativeInt".

...