获取Windows系统安装的字体名称极其对应的字体文件名
来源:互联网 发布:微信淘宝客 编辑:程序博客网 时间:2024/06/06 02:36
在我们的Flex+PHP+Apache的web项目中,有个模块需要通过输入文字,设置字体,生成JPG图片。因为Flex和PHP中没有直接访问获取Windows系统字体的函数,只好用Delphi做了一个获取系统字体和对应的字体文件名的工具。原理很简单,通过Screen.Fonts中的字体名称,查询系统注册表HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Fonts下该字体名称对应的文件名即可。需要注意的是Screen.Fonts中的字体名称和注册表中的键值不一定一一对应,比如字体名称为“宋体”,对应的注册表项的键值是“宋体 & 新宋体 (TrueType) ”,所以需要做匹配查找。
代码如下:
program fontlist;
...{$APPTYPE CONSOLE}
uses
SysUtils, Forms, Classes, Registry, Windows;
var
flist: TStrings;
vlist: TStrings;
dname: String;
fname: String;
i: Integer;
f: TextFile;
procedure GetFontsValues(var vlist: TStrings);
var
Registry: TRegistry;
begin
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
Registry.OpenKeyReadOnly('SOFTWAREMicrosoftWindows NTCurrentVersionFonts');
Registry.GetValueNames(vlist);
finally
Registry.Free;
end;
end;
function GetRegistryValue(KeyName: string; ValueName: string): string;
var
Registry: TRegistry;
begin
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
Registry.OpenKeyReadOnly(KeyName);
Result := Registry.ReadString(ValueName);
finally
Registry.Free;
end;
end;
function GetFontFile(FontName: string; var FontDisplayName: string; var FontFile: string): Boolean;
var
i: Integer;
begin
Result := False;
FontFile := GetRegistryValue('SOFTWAREMicrosoftWindows NTCurrentVersionFonts', FontName);
if (FontFile <> '') then begin
FontDisplayName := FontName;
Result := True;
end else begin
for i := 0 to vlist.Count - 1 do begin
if Pos(FontName, vlist.Strings[i]) > 0 then begin
FontFile := GetRegistryValue('SOFTWAREMicrosoftWindows NTCurrentVersionFonts', vlist.Strings[i]);
FontDisplayName := vlist.Strings[i];
Result := True;
Break;
end
end
end;
end;
begin
...{ TODO -oUser -cConsole Main : Insert code here }
vlist := TStringList.Create;
GetFontsValues(vlist);
AssignFile(f, 'Fonts.txt');
Rewrite(f);
Writeln(f, '<Fonts>');
flist := Screen.Fonts;
for i := 0 to flist.Count - 1 do begin
if GetFontFile(flist.Strings[i], dname, fname) then begin
Writeln(f, '<Font name="' + flist.Strings[i] + '" displayname="' + dname + '" filename="' + fname + '" />');
end;
end;
Writeln(f, '</Fonts>');
CloseFile(f);
vlist.Free;
end.
...{$APPTYPE CONSOLE}
uses
SysUtils, Forms, Classes, Registry, Windows;
var
flist: TStrings;
vlist: TStrings;
dname: String;
fname: String;
i: Integer;
f: TextFile;
procedure GetFontsValues(var vlist: TStrings);
var
Registry: TRegistry;
begin
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
Registry.OpenKeyReadOnly('SOFTWAREMicrosoftWindows NTCurrentVersionFonts');
Registry.GetValueNames(vlist);
finally
Registry.Free;
end;
end;
function GetRegistryValue(KeyName: string; ValueName: string): string;
var
Registry: TRegistry;
begin
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
Registry.OpenKeyReadOnly(KeyName);
Result := Registry.ReadString(ValueName);
finally
Registry.Free;
end;
end;
function GetFontFile(FontName: string; var FontDisplayName: string; var FontFile: string): Boolean;
var
i: Integer;
begin
Result := False;
FontFile := GetRegistryValue('SOFTWAREMicrosoftWindows NTCurrentVersionFonts', FontName);
if (FontFile <> '') then begin
FontDisplayName := FontName;
Result := True;
end else begin
for i := 0 to vlist.Count - 1 do begin
if Pos(FontName, vlist.Strings[i]) > 0 then begin
FontFile := GetRegistryValue('SOFTWAREMicrosoftWindows NTCurrentVersionFonts', vlist.Strings[i]);
FontDisplayName := vlist.Strings[i];
Result := True;
Break;
end
end
end;
end;
begin
...{ TODO -oUser -cConsole Main : Insert code here }
vlist := TStringList.Create;
GetFontsValues(vlist);
AssignFile(f, 'Fonts.txt');
Rewrite(f);
Writeln(f, '<Fonts>');
flist := Screen.Fonts;
for i := 0 to flist.Count - 1 do begin
if GetFontFile(flist.Strings[i], dname, fname) then begin
Writeln(f, '<Font name="' + flist.Strings[i] + '" displayname="' + dname + '" filename="' + fname + '" />');
end;
end;
Writeln(f, '</Fonts>');
CloseFile(f);
vlist.Free;
end.
该代码在delphi下编译后生成的文件可以在DOS窗口下运行,输出为XML格式的Fonts.txt文件。列举了系统可用的字体名称,注册表项中显示的字体全名,字体文件名。
- 获取Windows系统安装的字体名称极其对应的字体文件名
- 获取系统所有安装的字体名称
- Mac上多种字体名称的获取
- 获取TTF里面的字体名称
- Windows下的字体名称集
- Java获取系统中已经安装的字体
- asp.net获取系统已安装字体的方法
- iOS 获取系统自带的字体,打印当前字体
- Linux系统文件名字体不同的颜色都代表什么
- 获取系统字体的宽度和高度
- iOS 获取系统的字体及样式
- iOS 获取系统自带的字体
- 获取系统里面的所有字体
- iOS获取 当前的系统字体
- Word字体对应的像素
- 更改Windows系统默认字体的方法
- Windows系统字体的点阵显示示例
- Windows 7 系统字体模糊的解决方案
- 终于AC了 2008-02-19 23:24
- 牛人盛赞《梦断代码(Dreaming in Code)》
- 转 ACM 2008-01-16 16:16
- 转贴)推荐-好题 分类:ACM生涯2007.9.27 09:28 作者:alpc55 2008-01-08 15:23
- 转贴)推荐-好题 分类:ACM生涯2007.9.27 09:28 作者:alpc55 2008-01-08 15:23
- 获取Windows系统安装的字体名称极其对应的字体文件名
- 属性篇(4)—If you love css …
- Flex入门
- JS经典源码:通用javascript脚本函数库
- php从数据库中读取数据生成xml文件的方法
- 安装MiniSAP,DAEMON加载CD1,显示“Unable to mount image.File not accessible”
- native2ascii用法解析
- 网页设计实用技术:JS软键盘实现(源码)
- java处理汉诺塔问题