Как получить положение текста (в пикселях) в TMemo?

Я хочу получить позицию / размещение в пикселях текста (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 ответ

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

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


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

Другие вопросы по тегам