function LinesVisible(Memo: TMemo): integer;
var
OldFont : HFont;
Hand : THandle;
TM : TTextMetric;
Rect : TRect;
tempint : integer;
begin
Hand := GetDC(Memo.Handle);
try
OldFont := SelectObject(Hand, Memo.Font.Handle);
try
GetTextMetrics(Hand, TM);
Memo.Perform(EM_GETRECT, 0, longint(@Rect));
tempint := (Rect.Bottom - Rect.Top) div
(TM.tmHeight + TM.tmExternalLeading);
finally
SelectObject(Hand, OldFont);
end;
finally
ReleaseDC(Memo.Handle, Hand);
end;
Result := tempint;
end;
Текстовый код, который вы предоставили, является функцией под названием LinesVisible, которая рассчитывает количество видимых строк в контроле TMemo (текстовом компоненте).
Вот что она делает:
Она получает handle контекста устройства (Hand) для контрола memo с помощью GetDC.
Она выбирает текущую шрифт (OldFont) из контекста устройства и сохраняет ее исходное состояние.
Она получает метрики текста (TM) с помощью GetTextMetrics, которые предоставляют информацию о шрифте,such as the height of a line (tmHeight).
Она получает прямоугольник, содержащий текст контрола memo, вызывая функцию Windows API EM_ GETRECT и хранит его в переменной Rect.
Она рассчитывает количество видимых строк, разделив высоту прямоугольника минус его верхнюю границу (Bottom - Top) на сумму высоты строки и внешнего leading (tmHeight + tmExternalLeading). Это дает целочисленное значение, представляющее собой количество полных строк, которые могут поместиться в прямоугольнике.
Наконец, она освобождает handle контекста устройства с помощью ReleaseDC и возвращает рассчитанное значение как результат.
Чтобы использовать эту функцию, вы бы вызвали ее с ссылкой на ваш контрол TMemo как аргумент:
var
MyMemo: TMemo;
begin
LinesVisible(MyMemo);
end;
Этот код вернет целочисленное значение, представляющее собой количество видимых строк в контроле memo.
Функция LinesVisible возвращает количество видимых строк в компоненте TMemo, подсчитывая высоту области отображения и учитывая параметры шрифта.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.