私は、次のリソースでのDelphi XEのプロジェクトを抱えています:私はfunction LoadResourceFont
を使用し、次のコードを試してみましたロードフォント
:ところで
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function LoadResourceFontByName(const ResourceName : string; ResType: PChar) : Boolean;
var
ResStream : TResourceStream;
FontsCount : DWORD;
begin
ResStream := TResourceStream.Create(hInstance, ResourceName, ResType);
try
Result := (AddFontMemResourceEx(ResStream.Memory, ResStream.Size, nil, @FontsCount) <> 0);
finally
ResStream.Free;
end;
end;
function LoadResourceFontByID(ResourceID : Integer; ResType: PChar) : Boolean;
var
ResStream : TResourceStream;
FontsCount : DWORD;
begin
ResStream := TResourceStream.CreateFromID(hInstance, ResourceID, ResType);
try
Result := (AddFontMemResourceEx(ResStream.Memory, ResStream.Size, nil, @FontsCount) <> 0);
finally
ResStream.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if LoadResourceFontByName('MyFont1', RT_RCDATA) then Label1.Font.Name := 'My Custom Font1';
if LoadResourceFontByID(2, RT_FONT) then Label2.Font.Name := 'My Custom Font2';
end.
を私はフォントをEXEファイルに埋め込む必要がある場合、フォントの再配布権を持っているべきであることを知っています。
しかし、問題は、フォント名は(私はマイカスタムFont1、マイカスタムfont2でを使用していた)フォントの実際の名前ではない場合、フォントが正しくロードされ、未知のフォントを示していないということですキャラクター。
私の質問は、しかしかどうか、私はfounctionsにResStream.Free
を使用していたということです、まだ私はメモリー・リークかどうかを保護するために再びFormClose
とFormDestroy
イベントを定義する必要がありますか?
'Label2.Font [2]'なぜそれをコンパイルする必要がありますか?ファイル名またはリソース名ではなく、TTFファイル内で定義します。その声明が意味するものは何ですか? –
私は、Label1のフォントをRCDATAタイプのリソースからロードする必要があり、Label2のフォントはFONTタイプのリソースからロードする必要があります。 –
あなたの関数の定義を調べるのはどうですか?それはストリングにブール値を割り当てるのを止めるでしょう。また、関数の戻り値をどのように伝えるかを示します。 –