如题

解决方案 »

  1.   

    我查了一下资料,这样写好象可以,但对字体设为中文时不准确
    procedure TForm1.Button1Click(Sender: TObject);
    var
        TM:TextMetric;
        Hand:THandle;
        OldFont:HFont;
        DC:HDC;
        RowSpace,tempint:Integer;  //tempint为可以显示的行数
        Rect:TRect;
    begin
         DC:=GetDC(memo1.Handle);  //获取设备上下文句柄
         Try
             OldFont:=SelectObject(DC,Memo1.Font.Handle);   //设置当前对象
             Try
                  GetTextMetrics(DC,TM);
                  Memo.Perform(EM_GETRECT, 0, longint(@Rect)); 
                  tempint := (Rect.Bottom - Rect.Top) div (TM.tmHeight +  
                                                          TM.tmExternalLeading);
                  RowSpace:=tm.tmInternalLeading;
             Finally
                  SelectObject(DC,OldFont);  //还原当前对象
             end;
         finally
             ReleaseDC(Memo1.Handle,DC);       //释放HDC
         end;
         showmessage(inttostr(RowSpace));
    end;
      

  2.   

    中文字似乎可以用tm.tmExternalLeading来取得,
    所以可以取两者的最大值,不过好象有个别字体得到的都是0,比如Fixedsys。
    至于这是什么道理我也说不上来。:-)
    RowSpace:=Max(tm.tmInternalLeading, tm.tmExternalLeading);