Как узнать номер первой видимой строки в 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;