0

我想通过单击Image1 组件将加载到Image1中的图片从一个名为1active.png的图片更改为第二个名为1inactive.png的图片,反之亦然。

有什么办法吗?

4

3 回答 3

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;
于 2009-06-11T21:40:49.883 回答
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) 从表单设计器中,找到图片属性并单击省略号以加载 1active.png 文件供初学者使用。

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

  fImageActive := true;
于 2009-06-11T18:33:51.283 回答
0

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

于 2009-06-11T16:50:47.613 回答