【发布时间】:2022-01-12 16:44:51
【问题描述】:
是否可以在设计时加载资源? 我正在制作一个速度按钮组件,并且我想在按钮大小发生变化时自动从资源中加载新图像。它在运行时已经正常工作,但在设计时,在我设置资源名称属性后,它不显示任何图标。 如果不可能,我可以绘制一个默认矩形来代替图标,但在设计时显示我的图标也会很好。
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;
【问题讨论】:
-
有趣的部分是处理按钮大小调整的代码。
-
哦,资源是否包含在包含该组件的包中?
-
LoadIconWithScaleDown这是一个标准的 windows api。该资源不能包含在包中,因为我在表单上放置的每个按钮的图标都会不同... -
那么,如果图像在设计期间甚至不可用,您希望如何显示?
-
您的应用程序在设计时不存在,因此无法从该不存在的应用程序访问资源。
标签: resources vcl delphi-10.3-rio