Delphi组件中的PNG图像集合

3

今天我的问题是关于在组件中创建一组PNG图像。我发现有一个按钮可以接受一个PNG图像作为字形,但它使用一个由图像的四个状态组成的PNG图像,如下所示:

enter image description here

我已经修改了组件,使用了四个不同的图像,每个图像都代表一个状态。因此,我的组件看起来像这样:
  ...
  public
    FPngImgEnabled: TPngImage;
    FPngImgDisabled: TPngImage;
    FPngImgDown: TPngImage;
    FPngImgOver: TPngImage;
    FDown: Boolean;
    Constructor Create(AOwner: TComponent); override;
    Destructor Destroy; override;
    procedure Paint; override;
  published
    property PngImgEnabled: TPngImage read FPngImgEnabled write SetPngImgEnabled;
    property PngImgDisabled: TPngImage read FPngImgDisabled write SetPngImgDisabled;
    property PngImgDown: TPngImage read FPngImgDown write SetPngImgDown;
    property PngImgOver: TPngImage read FPngImgOver write SetPngImgOver;
  ...

这是我有一个包含四个PNG图像和四个SetPng...过程的组件的方式。我想知道是否有一种方法可以使用包含这四个PNG图像的集合,类似于“TPNGImagesList”的东西,将图像集中在一个地方。


1
TImageList 有什么问题吗? - fantaghirocco
1
PngComponents中包含有TPngImageList。也许这符合您的需求。也许甚至包括一个现成的按钮 - 我没有检查过。 - Uli Gerhardt
1
附带说明:TPNGImageList出了什么问题?顺便问一下,使用的是哪个Delphi版本? - Uwe Raabe
1
哪个版本的Delphi?如果您可以使用泛型,为什么不使用它呢?创建一个类型TImageState = (isEnabled, isDisabled, isDown, isOver);,然后使用TObjectDictionary<TImageState, TPngImage>。奖励是字典可以拥有图像对象并自行释放它们。 - J...
我使用的 Delphi 版本是 XE7。 - Eros
如果您有XE7,可以查看标准的TButton。它使用图像列表(也可以是TPngImageList),并具有ImageIndex、HotImageIndex、DisabledImageIndex、PressedImageIndex、SelectedImageIndex和StylusHotImageIndex。这至少可以给您一个想法。 - Uwe Raabe
1个回答

1
我认为你需要类似这样的东西:
  type
    TImgType = (itEnabled, itDisabled, itDown, itOver);


  ...
  protected
    procedure SetImg(Index: TImgType; Value: TPngImage);
    function  GetImg(Index: TImgType): TPngImage;      
  public
    FImages: TList<TPngImage>;
    FDown: Boolean;
    Constructor Create(AOwner: TComponent); override;
    Destructor Destroy; override;
    procedure Paint; override;
  published
    property Image[Index:TImgType]: TPngImage read GetImg write SetImg;
    property PngImgEnabled: TPngImage index itEnabled read GetImg write SetImg;
    property PngImgDisabled: TPngImage index itDisabled read GetImg write SetImg;
    property PngImgDown: TPngImage index itDown read GetImg write SetImg;
    property PngImgOver: TPngImage index itOver read GetImg write SetImg;

  ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接