各位高手,我用TFontDialog.execute提示用户选择字体,然后通过访问TFontDialog的Font.size 属性来获得字体的大小.但是如果用户选择了宋体的六号, TFontDialog的Font.Size的值就是 8 ,但是"六号"的实际大小,跟"8"号字是有一点大小的差别的,这个在选择字体及大小对话框的时候,在"示例"那里都可以看得出来.因为我需要把用户选择的字体及大小保存下来,如果我是保存 8 这个数值,那么用户就有意见了,毕竟"六号"跟 "8" 的实际大小是有区别的.但是如果不保存8, Font.Size是整数类型,又不能保存文字.请问怎么样才能设置 Font.Size 的值为 "六号"呢?谢谢!

解决方案 »

  1.   

    其实8 和“六号”的区别就是Height属性分别是-11和-10。
    记下每一号字的Height属性和size属性就好了。
      

  2.   

    要保存TFont的内容并能正确恢复最简单的方法是保存TFont.Handle所对应font的具体结构,恢复时根据这个结构创建一个HFONT然后赋值给TFont.Handle即可。保存字体:var  LFont: TFont;  LLF: TLogFont;  LMS: TMemoryStream;…………begin   …………    LFont := Edit1.Font;    GetObject(LFont.Handle, SizeOf(LLF), @LLF);    LMS.Write(LLF, SizeOf(LLF));    LMS.Position := 0;//不能丢了这句    LIni.WriteBinaryStream('Config', 'LinkFont', LMS);  …………end;加载字体:var  LFont: TFont;  LLF: TLogFont;  LMS: TMemoryStream;Begin  …………    LIni.ReadBinaryStream('Config', 'LinkFont', LMS);    LMS.Position := 0;//不能丢了这句    LMS.Read(LLF, SizeOf(LLF));    LFont.Handle := CreateFontIndirect(LLF);…………End;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage('size:'#13#10'1:' + inttostr(edit1.Font.Size) + #13#10 + '2:' + inttostr(edit2.Font.Size));
      ShowMessage('height:'#13#10'1:' + inttostr(edit1.Font.height) + #13#10 + '2:' + inttostr(edit2.Font.height));
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      edit1.Font.Height := -10;
    end;诚如一层所说。
      

  4.   

    记录时不能只记font.size,包括其它的属性都应记录。    property Charset;
        property Color;
        property Height;
        property Name;
        property Pitch;
        property Size;
        property Style;