在设计时加载资源?
Loading resources at design time?
是否可以在设计时加载资源?
我正在制作一个速度按钮组件,我想在按钮大小发生变化时自动从资源中加载新图像。它在 运行 时已经正常工作,但在设计时,在我设置资源名称 属性 后,它没有显示任何图标。
如果不可能的话,我可以绘制一个默认的矩形来代替图标,但在设计时也能显示我的图标会很好。
function TPngSpeedButton.LoadIcon(ResName: String): Boolean;
var hI: HICON;
Ico: TIcon;
ISize: Integer;
Png: TPngImage;
begin
Result:= False;
if ResName = '' then Exit;
ISize:= Height - 7 - Round(Height * 0.15);
Png:= TPngImage.Create; Ico:= TIcon.Create;
try
if LoadIconWithScaleDown(HInstance, PChar(ResName), ISize, ISize, hI) = S_OK then begin
Ico.Handle:= hI;
ConvertToPng(Ico, Png);
SetPngImage(Png);
Result:= True;
end;
finally
Png.Free; Ico.Free;
end;
end;
您无法在设计时从您的应用程序资源加载图标,因为那时应用程序可执行文件甚至不存在,因为您还没有编译它。
现在,您可以做的是创建一个基于资源的动态 link 库(资源 DLL),您可以单独编译它。这样,您甚至可以在设计时访问 DLL 资源,类似于 Delphi IDE 已经访问某些系统资源的方式。
如果您不想处理额外的 DLL,请将您的图标放入一个或多个 ImageList,因为来自 ImageList 的图像在 运行 时和设计时都可用。
是否可以在设计时加载资源? 我正在制作一个速度按钮组件,我想在按钮大小发生变化时自动从资源中加载新图像。它在 运行 时已经正常工作,但在设计时,在我设置资源名称 属性 后,它没有显示任何图标。 如果不可能的话,我可以绘制一个默认的矩形来代替图标,但在设计时也能显示我的图标会很好。
function TPngSpeedButton.LoadIcon(ResName: String): Boolean;
var hI: HICON;
Ico: TIcon;
ISize: Integer;
Png: TPngImage;
begin
Result:= False;
if ResName = '' then Exit;
ISize:= Height - 7 - Round(Height * 0.15);
Png:= TPngImage.Create; Ico:= TIcon.Create;
try
if LoadIconWithScaleDown(HInstance, PChar(ResName), ISize, ISize, hI) = S_OK then begin
Ico.Handle:= hI;
ConvertToPng(Ico, Png);
SetPngImage(Png);
Result:= True;
end;
finally
Png.Free; Ico.Free;
end;
end;
您无法在设计时从您的应用程序资源加载图标,因为那时应用程序可执行文件甚至不存在,因为您还没有编译它。
现在,您可以做的是创建一个基于资源的动态 link 库(资源 DLL),您可以单独编译它。这样,您甚至可以在设计时访问 DLL 资源,类似于 Delphi IDE 已经访问某些系统资源的方式。
如果您不想处理额外的 DLL,请将您的图标放入一个或多个 ImageList,因为来自 ImageList 的图像在 运行 时和设计时都可用。