TMemo — подсчет и нумерация видимых строк

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

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *