Как получить положение текста (в пикселях) в 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".