Как узнать номер первой видимой строки в TMemo.
Label1.Caption:=IntToStr(Memo1.Perform(EM_GETFIRSTVISIBLELINE, 0, 0));
Как узнать количество видимых строчек в TMemo.
// ------------------------------------------------------------------------ //
// Как узнать количество видимых строчек в TMemo.
// Основано на WinAPI.
// ------------------------------------------------------------------------ //
function LinesVisible(Memo: TMemo): integer;
var
Hand : THandle;
tFont : HFont;
TM : TTextMetric;
Rect : TRect;
resint : integer;
begin
resint := 0;
// WinAPI. Функция GetDC.
// Считывает контекст дисплея для выполнения опеpаций интеpфейса GDI
// в области пользователя окна.
Hand := GetDC(Memo.Handle);
try
// WinAPI. Функция SelectObject.
// Выбиpает логический объект для DC. (Шрифт)
// Если ошибка,
tFont := SelectObject(Hand, Memo.Font.Handle);
try
// WinAPI. Функция GetTextMetrics.
// Считывает метpику текущего выбpанного шpифта в Metric.
GetTextMetrics(Hand, TM);
// Получаем размеры пpямоугольника.
Memo.Perform(EM_GETRECT, 0, longint(@Rect));
// Высчитываем количество строк в прямоугольнике.
resint := (Rect.Bottom - Rect.Top) div
(TM.tmHeight + TM.tmExternalLeading);
finally
SelectObject(Hand, tFont); // Выбираем объект.
end;
finally
ReleaseDC(Memo.Handle, Hand);
end;
Result := resint; // Возвращаем количество видимых строк.
end;