你说的是Canvas.font.Height 还是Canvas.font.Size,如果是前者如下:
DefFontData.Height:=-MulDiv(9,ScreenLogPixels,72);应该是互为相反数的关系即
Canvas.TextHeight('a'):=-Canvas.font.Height ;
详情见Graphics.pas找initdeffontdata;
如果是后者,自已多改几次Font.size找规律。

解决方案 »

  1.   

      007老兄,Canvas.TextHeight('a')根本不等于 -Canvas.font.Height ;
    我就是这个地方搞不懂!!!!
      

  2.   

    to lpf78(lpf) :
    你好,我就是ZCB007,现在叫wangzh(独孤求问)啦,
    你把字体改成宋体试试。
    或Font.charset:=GB2312_CHARSET
    不要是ANSI_CHARSET
      

  3.   

    to lpf78(lpf):我现在改名叫Wangzh(独孤求问)
    你把Font.CharSet改成GB2312_CHARSET试试。不要是ANSI_CHARSET
    详情见Graphics.pas找initdeffontdata
      

  4.   

    to 007  帮人帮到底吧,其他字体和charSet 怎么换算,
     20分先给你了!!!!!!!!!!!
      

  5.   

    谢谢你的分
    to lpf78(lpf):一般常用charSet 就两种GB2312_CHARSET(中文)和ANSI_CHARSET(外文)还有其他类型,见原码
    procedure InitDefFontData;
    var
      Charset: TFontCharset;
    begin
    //ScreenLogPixels:屏幕的象素
      DefFontData.Height := -MulDiv(8, ScreenLogPixels, 72);// 72 div 8=9
      if not SysLocale.FarEast then Exit;
      Charset := GetDefFontCharset;
      case Charset of
        SHIFTJIS_CHARSET:
          begin
            DefFontData.Name := '俵俽 俹僑僔僢僋';
            DefFontData.Height := -MulDiv(9, ScreenLogPixels, 72);//72 div 9=8
            DefFontData.CharSet := CharSet;
          end;
        GB2312_CHARSET:
        begin
       //本人加的
            DefFontData.Name := '宋体';
            DefFontData.Height := -MulDiv(9, ScreenLogPixels, 72);//72 div 9=8
            DefFontData.CharSet := CharSet;
        end;
      end;
    end;
    这就是为什么宋体9号大小才和英文8号差不多,规律实在不好找,你的程序最多也就这么个情况:
    ANSI_CHARSET 0 ANSI characters. 
    DEFAULT_CHARSET 1 Font is chosen based solely on Name and Size. If the described font is not available on the system, Windows will substitute another font.
    SYMBOL_CHARSET 2 Standard symbol set.
    MAC_CHARSET 77 Macintosh characters. Not available on NT 3.51.
    SHIFTJIS_CHARSET 128 Japanese shift-jis characters.
    HANGEUL_CHARSET 129 Korean characters (Wansung).
    JOHAB_CHARSET 130 Korean characters (Johab). Not available on NT 3.51GB2312_CHARSET 134 Simplified Chinese characters (mainland china).
    CHINESEBIG5_CHARSET 136 Traditional Chinese characters (taiwanese).
    GREEK_CHARSET 161 Greek characters. Not available on NT 3.51.
    TURKISH_CHARSET 162 Turkish characters. Not available on NT 3.51
    VIETNAMESE_CHARSET 163 Vietnamese characters. Not available on NT 3.51.
    HEBREW_CHARSET 177 Hebrew characters. Not available on NT 3.51
    ARABIC_CHARSET 178 Arabic characters. Not available on NT 3.51BALTIC_CHARSET 186 Baltic characters. Not available on NT 3.51.
    RUSSIAN_CHARSET 204 Cyrillic characters. Not available on NT 3.51.
    THAI_CHARSET 222 Thai characters. Not available on NT 3.51
    EASTEUROPE_CHARSET 238 Includes diacritical s for eastern european countries. Not available on NT 3.51.
    OEM_CHARSET 255 Depends on the codepage of the operating system.
    做一个类似这样的语句:
    case font.charset of
    value1:
    begin
    规律1:canvas.font.height:=-canvas.font.textheight('a');
    end;
    value2:
    beign
    canvas.font.height:=-canvas.font.textheight('a')+2;
    end;
    ........
    规律自已这样试:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    showmessage(Inttostr(canvas.font.height));
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    showmessage(Inttostr(canvas.textheight('a')));
    end;改一次Font.name:试一次规律,多试几次把你的规律就找到了,别的我也没有么办法。
    惭愧,惭愧。。