2
A
回答
2
不知道它是否适用于FireMonkey,但是当我想将自定义字体加载到我的标准Delphi应用程序时,此代码适用于我。
unit UExternalFonts;
interface
uses
Windows, SysUtils, Messages, Classes, Generics.Collections;
type
{ .: TExternalFonts :. }
TExternalFonts = class sealed(TList<HFONT>);
var
ExternalFonts: TExternalFonts;
function AddExternalFont(const AFileName: String): HFONT; overload;
function AddExternalFont(const AStream: TStream): HFONT; overload;
implementation
{ .: DoCleanup :. }
procedure DoCleanup();
var
I: Integer;
begin
for I := ExternalFonts.Count -1 downto 0 do
begin
RemoveFontMemResourceEx(ExternalFonts[I]);
ExternalFonts.Delete(I);
//SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
end;
end;
{ .: AddExternalFont :. }
function AddExternalFont(const AFileName: String): HFONT; overload;
var
FS: TFileStream;
begin
Result := 0;
if not FileExists(AFileName) then
exit;
FS := TFileStream.Create(AFileName, fmOpenRead + fmShareExclusive);
try
Result := AddExternalFont(FS);
finally
FS.Free();
end;
end;
{ .: AddExternalFont :. }
function AddExternalFont(const AStream: TStream): HFONT; overload;
var
MS: TMemoryStream;
Temp: DWORD;
begin
Result := 0;
if not Assigned(AStream) then
exit;
Temp := 1;
MS := TMemoryStream.Create();
try
MS.CopyFrom(AStream, 0);
Result := AddFontMemResourceEx(MS.Memory, MS.Size, nil, @Temp);
if (Result <> 0) then
ExternalFonts.Add(Result);
//SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
finally
MS.Free();
end;
end;
initialization
ExternalFonts := TExternalFonts.Create();
finalization
DoCleanup();
ExternalFonts.Free();
end.
相关问题
- 1. Firemonkey替代VCL ShortCut()函数
- 2. 如何在App Engine上加载PIL ImageFont的替代字体?
- 3. 在Firemonkey中设置字体
- 4. 在firemonkey中安装字体
- 5. Firemonkey XE4字体与GlobalUseDirect2D =假
- 6. 最好的芝加哥字体替代
- 7. jQuery加载()替代
- 8. 在firemonkey中加载dylib
- 9. 用什么字体替代
- 10. 字体锁的替代
- 11. 替代字体真棒?
- 12. 定义替代字体
- 13. WordPress加载.SCSS代替.CSS
- 14. Android:替代GIF加载器?
- 15. 替代预加载图像
- 16. Flex:Runtime字体加载
- 17. 代替某些字体代码的字体图标的问号
- 18. Delphi Firemonkey无法正确显示字体
- 19. 在FireMonkey的球体上书写文字
- 20. 替代字/用粗体字串/串
- 21. Web字体加载器 - 何时加载所有字体?
- 22. 使用RTTI加载FireMonkey风格资源
- 23. @字体面不加载字体
- 24. 字体很棒字体没有加载?
- 25. 在加载页面时加载字体
- 26. 如何将HTML字符串加载到Firemonkey TWebBrowser中?
- 27. 文件加载一些字节都被替换为Unicode的替代字符,同时加载文件
- 28. 寻找“DIN”字体的替代品
- 29. CSS可以用于替代字体吗?
- 30. 替代字体和Word自动化
DoCleanup()的工作原理?我的意思是,在循环的后半部分,您将开始删除不存在的索引。 – arthurprs 2012-03-04 19:57:51
很棒的地方!固定。 – Pateman 2012-03-04 20:08:31
HFONT听起来非常以Windows为中心。我怀疑这对Firemonkey是否有效,至少在Windows以外的任何平台上都是如此。 – 2012-03-05 13:04:00