我正在使用以下资源的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文件中,我知道我应该有字体的再分配权。
但问题是,如果字体名称(我使用我的自定义字体1 ,我的自定义字体2 )不是字体的实际名称,则字体确实如此没有正确加载并显示未知的字体字符。
我的问题是,虽然我在功能中使用了 ResStream.Free
,但我必须再次定义 FormClose
和 FormDestroy
保护内存泄漏的事件?
答案 0 :(得分:3)
您的代码中有多处错误。
export default {
filters: {
reverse: function(value) {
return value.split('').reverse().join('');
}
}
};
返回LoadResourceFont()
。您正尝试将该值分配给Boolean
属性,由于TLabel.Font.Name
不是Boolean
,因此您无法执行此操作。您还尝试将String
分配给Boolean
属性,该属性甚至不是为其分配值的有效标识符。
您第一次拨打TLabel.Font[2]
时指的是错误的资源名称。
LoadResourceFont()
的第一个参数是LoadResourceFont()
,但您对String
的第二次调用是尝试传递全局LoadResourceFont()
变量({{1} }})预期Hinstance
。
您尝试将第二种字体作为RCDATA资源加载,而实际上它是FONT资源。
要执行您尝试的操作,您需要先调用THandle
将字体加载到字体表中,然后将String
设置为所需的字体名称font(在TTF文件中定义的名称,而不是文件名或资源名称),例如:
LoadResourceFont()
答案 1 :(得分:0)
Label.Font
没有下标,因此Label2.Font[2]
无效。
此外,将LoadFontResource
函数的布尔结果分配给任何类型的Label.Font
显然不起作用,因为该布尔结果永远不会是字体。 / p>
我建议您学习使用Delphi进行编程的基础知识,并在担心从内存加载自定义字体之前,先研究TFont的VCL / FMX文档。