Ich habe ein Delphi XE-Projekt mit der folgenden Ressource:Laden Schriftart aus Ressourcendatei
I function LoadResourceFont
und versuchte den folgenden Code verwendet haben:
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.
By the way : Ich weiß, dass ich Redistributionsrechte für die Schriftart haben sollte, wenn ich es in meine EXE-Datei einbetten muss.
Aber das Problem ist, dass, wenn der Schriftname (I My Custom Font1, My Custom Font2 verwendet habe) ist nicht der tatsächliche Name der Schriftart, wird die Schriftart nicht richtig geladen und zeigt eine unbekannte Schrift Charakter.
Meine Frage ist, ob obwohl ich ResStream.Free
in dem founctions verwendet habe, aber ich habe wieder definieren FormClose
und FormDestroy
Ereignis Speicher Leakage oder nicht zu schützen?
'Label2.Font [2]' warum sollte es kompilieren? Was soll diese Aussage bedeuten? –
Ich brauche, dass Label1 Schriftart aus RCDATA Typ Resource geladen werden sollte und Label2 Font sollte von FONT Type Resource geladen werden. –
Wie wäre es mit den Definitionen Ihrer Funktionen? Das stoppt die Zuweisung von booleschen Zeichenfolgen. Es wird Ihnen auch sagen, was mit den Rückgabewerten Ihrer Funktionen zu tun ist. –