计算Memo或者RichEdit每屏显示的行数

时间:2010-01-27 09:04:04  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:XX');end;问题是,TForm 和TMemo 需要用同样的字体。如果不同,可以用以下代码:function TForm1.MemoLinesShowingLong(Memo: TMemo): integer;VarOldfont: HFont...
  正文:

function TForm1.MemoLinesShowing(memo: TMemo): integer;
var
R: TRect;
begin
  Memo.Perform(EM_GETRECT, 0, Longint(@R));
  Result := (R.Bottom - R.Top) div Canvas.TextHeight('XXX');
end;

问题是,TForm 和TMemo 需要用同样的字体。

如果不同,可以用以下代码


function TForm1.MemoLinesShowingLong(Memo: TMemo): integer;
Var
Oldfont: HFont; {the old font}
DC: THandle; {Device context handle}
i: integer; {loop variable}
Tm: TTextMetric; {text metric structure}
TheRect: TRect;
begin
  DC := GetDC(Memo.Handle); {Get the memo's device context}
  try
    {Select the memo's font}
    OldFont := SelectObject(DC, Memo.Font.Handle);
    try
      GetTextMetrics(DC, Tm); {Get the text metric info}
      Memo.Perform(EM_GETRECT, 0, longint(@TheRect));
      Result := (TheRect.Bottom - TheRect.Top) div
      (Tm.tmHeight + Tm.tmExternalLeading);
      finally
        SelectObject(DC, Oldfont); {Select the old font}
      end;
      finally
        ReleaseDC(Memo.Handle, DC); {Release the device context}
      end;
    end;

"计算Memo或者RichEdit每屏显示的行数"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/Delphi/2010-01-27/12451.html


关键字:

关于《计算Memo或者RichEdit每屏显示的行数》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td