如何得到系统字体列表?不是用字体对话框。有这样的API?(50分)

  • 主题发起人 主题发起人 张辉明
  • 开始时间 开始时间

张辉明

Unregistered / Unconfirmed
GUEST, unregistred user!
如何得到系统字体列表?不是用字体对话框。有这样的API?
 
screen.fonts
 
procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; i:integer;<br>&nbsp; FontArray: array [0..255] of string;<br>begin<br>&nbsp; for i:=0 to Screen.Fonts.Count-1 do<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; FontArray:=Screen.Fonts.Strings;<br>&nbsp; &nbsp; &nbsp; Memo1.Lines.add(FontArray);<br>&nbsp; &nbsp; end;<br>end;
 
memo1.lines:=screen.fonts<br>直接这样就可以,两者都是tstrings
 
windows提供这样的api,最主要的是enumfonts(),在sdk中定义如下:<br>int EnumFonts(<br>&nbsp; &nbsp; HDC hdc, // 指明要访问的设备描述表句柄<br>&nbsp; &nbsp; LPCTSTR lpFaceName, // 指向字体名字字符串的指针 <br>&nbsp; &nbsp; FONTENUMPROC lpFontFunc, // 列举的回掉函数地址<br>&nbsp; &nbsp; LPARAM lParam // 保存结果的地址<br>&nbsp; &nbsp;);<br>先定义一个回调函数:<br>function enumFontsProc(Var LogFont:TLogFont;var TextMetric:TTextMetric;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FontType:integer;myData:pointer):integer;stdcall;<br>begin<br>&nbsp;TStrings(myData).add(logFont.lfFaceName);//设定字体名称<br>&nbsp;Result:=1;//结果不为空<br>end;<br>然后可以调用enumfonts();<br>try<br>&nbsp;hsysdc:=GetDc(0);//得到系统设备描述表句柄<br>&nbsp;EnumFonts(hsysdc,nil,@EnumFontsProc,pointer(Combobox1.Items));<br>//结果放在combobox1中.<br>finally<br>&nbsp;releaseDc(0,hsysdc);<br>end;<br>
 
待我回家试过了再给你们加分.
 
for i=0 to Screen.Fonts.Count do <br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp;Combobox1.items.add(screen.fonts.string);<br>&nbsp; &nbsp; end;
 
多人接受答案了。
 
后退
顶部