通过单击TImage组件更改图片 - Delphi

时间:2009-06-11 16:37:17

标签: delphi click image

我想更改图片加载到 Image1 - 从一个名为 1active.png 的第二个名为 1inactive.png ,反之亦然,点击Image1组件上的

有什么办法吗?

3 个答案:

答案 0 :(得分:5)

我假设您正在使用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 :(得分:3)

<强>成分

  • 1布尔变量
  • 1 TImage组件
  • 添加1行以形成OnCreate事件处理程序
  • 1 TImage.OnClick事件处理程序

<强>说明

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)从表单设计器中,找到picture属性,然后单击省略号为初学者加载1active.png文件。

4)单击表单,找到名为“OnCreate”的事件,双击并添加以下代码(这将设置初始状态):

  fImageActive := true;

答案 2 :(得分:0)

您必须将两个图像加载到项目的资源文件中,并且在运行时,您可以从资源文件中读取图片并将其加载到OnClick上的图像中。我正在使用的Delphi版本(6)没有对PNG文件的本机支持,但我认为后一版本