我想通过单击Image1 组件将加载到Image1中的图片从一个名为1active.png的图片更改为第二个名为1inactive.png的图片,反之亦然。
有什么办法吗?
我假设您使用的是 D2009,因为您可以在 Image1 中加载 png 文件。
如果您不想将图像与应用程序一起分发(如 skamradt 的解决方案所暗示的那样),则必须将它们作为资源包含:
将 png 添加到您的项目:使用菜单“项目 | 资源... ”并添加文件.
相应地命名它们以获得如下内容:
1active.png RCData PngImage_Active
1inactive.png RCData PngImage_Inactive
在您的 Click 事件中,您需要一些状态指示器来知道要显示哪一个(例如 skamradt)。
我使用 Image1.hint 来判断加载了哪个图像(快速而肮脏,用于演示目的)。
使用下面的 LoadImgFromPngResource proc 加载适当的 png 图像:
procedure LoadImgFromPngResource(const AResName: string; DestImage: TImage);
var
png: TPngImage;
begin
png := TPngImage.Create;
try
png.LoadFromResourceName(HInstance, AResName);
DestImage.Picture.Assign(png);
finally
png.Free;
end;
end;
procedure TForm4.Image1Click(Sender: TObject);
begin
if Image1.Hint <> 'Active' then
begin
LoadImgFromPngResource('PngImage_Active', Image1);
Image1.Hint := 'Active';
end
else
begin
LoadImgFromPngResource('PngImage_Inactive', Image1);
Image1.Hint := 'Inactive';
end;
end;
成分:
说明:
1) 在表单声明的私有部分创建一个布尔变量。对于此示例,将此变量称为 fImageActive。
private
fImageActive : boolean;
2) 在表单设计器中,将(或选择现有的)TImage 组件拖放到表单上并选择 onClick 事件,然后双击切换到编辑状态。然后添加以下代码:
fImageActive := not fImageActive;
if fImageActive then
Image1.Picture.LoadFromFile('1active.png')
else
Image1.Picture.LoadFromFile('1inactive.png')
3) 从表单设计器中,找到图片属性并单击省略号以加载 1active.png 文件供初学者使用。
4)点击表单,找到名为“OnCreate”的事件,双击并添加以下代码(这将设置初始状态):
fImageActive := true;
您必须将这两个图像加载到项目的资源文件中,并且在运行时您可以从资源文件中读取图片并将它们加载到 OnClick 上的 timage 中。我目前使用的 Delphi 版本(6)没有对 PNG 文件的原生支持,但我认为后一个版本可以