delphi - FIREMONKEY - 加载替代字体

标签 delphi fonts load truetype firemonkey

我想在 Delphi Firemonkey 应用程序中加载外部字体。

有什么信息可以做到这一点吗?

最佳答案

不确定它是否适用于 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.

关于delphi - FIREMONKEY - 加载替代字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9497736/

相关文章:

windows - 随机文件生成器(再次!)

java - Apache POI 字体问题

PHP - 从数据库加载/删除是否使用静态方法?

delphi - 服务器代码在单个 Delphi 应用程序中通知多个客户端数据更改的首选方式是什么?

delphi - 属性不继承?

delphi - 有没有办法确定滚动条在 TDBGrid 上是否可见

ios - 如何将自定义字体应用于整个框架中的所有 Labels、UITextFields 和 UIButtons?

python - matplotlib plot中如何显示中文

javascript - 仅在需要时加载 JavaScript(点击时)

java.io.FileNotFoundException 在内部存储 android 中保存/加载