Jump to content
Uwe Raabe

ImageName vs. ImageIndex

Recommended Posts

Who hasn't seen this before: A bunch of controls and actions are linked to an ImageList with an ImageIndex, but as soon as you sort this ImageList to give it a sensible order all controls immediately start to show the wrong images.

 

Wouldn't it be cool if instead a cryptic number as ImageIndex you could specify a descriptive name at the control? Thus the order of images inside the ImageList wouldn't matter at all.

 

Of course, the ImageList has to support names in the first place. TPngImageList from PngComponents does that right from the beginning. So what about implementing that feature based on TPngImageList?

 

Can't be that hard, can it? Well, it turned out to be a bit more complex than I anticipated, but that's probably because I had set my goals pretty high. So I expected to have a selection from image names for the ImageIndex properties of the control and thus a display of the image name instead of just a number. Also this scheme should be extendable to other controls and especially to other ImageLists supporting names.


From this the ImageIndexMapper was born. A non-visual component to be placed on a form or datamodule, that when activated takes care of the image names. You just have to call one method to resolve those names to the actual corresponding number values.

 

The attached ZIP file contains all the sources and files for the component and design time support as well as a sample project (currently for Delphi 10.2 Tokyo only). As a prerequisite you have to use PngComponents from the above source. I suggest to use the recent version V1.5.0 with direct ImageIndexMapper support. Older versions require the contained PNG Support Package to be installed and add the corresponding unit to your uses clause somewhere in your project. Version 1.5.0 makes this obsolete,

 

Presumably there is much room for improvement. Whoever finds some time to test this component - please forward any encountered bug to me.

 

Here is a short GIF showing the switch from TPngImageList to TImageList (without name support) in the Object Inspector: https://www.screencast.com/t/4MbJkygjFR

 

ImageIndexMapper.zip

 

Cross Post: https://www.delphipraxis.net/198212-imagename-statt-imageindex.html#post1415709

Edited by Uwe Raabe
  • Thanks 9

Share this post


Link to post
Guest

I have longed for this for ages!! For example, DX has a "BarManager" and that component only have on (1) ImageList property. Lots of icons, one small mistake, boom. Adding to the complexity when we have actually different icons for "small" and "large".

 

However, with this solution, it is mandated that all components having an "ImageIndex" property needs to be of a certain class. So if i have prerequisites in a project to (for example) only use DX "Editors" then this is not a solution i can use. Am i correct?

 

TIA,

 

/Dany

Share this post


Link to post
27 minutes ago, Dany Marmur said:

However, with this solution, it is mandated that all components having an "ImageIndex" property needs to be of a certain class. So if i have prerequisites in a project to (for example) only use DX "Editors" then this is not a solution i can use. Am i correct?

Not quite. :classic_cool:

 

Currently the contained sources support all ImageIndex properties of the standard VCL controls, whatever they are named (f.i. TButton). This is done in ImageIndexMapper.Basics.pas which implements and registers wrappers for each of these components. It should be not too difficult to expand this to other components as well.

 

It should also be easy to support other TCustomImageList descendants. This can be implemented either in the imagelist component directly by supporting the INameMapping interface or by registering a wrapper class like shown in ImageIndexMapper.PngImageList.pas. The latter exist only to show the mechanism, while the recent version of PngComponents makes use of the former technique.

Share this post


Link to post
Guest

@Uwe Raabe, sound absolutely brilliant!

I'm itching to get the time to check this out properly!

 

Regards,

 

/D

Share this post


Link to post
2 hours ago, Dany Marmur said:

i'm getting a "404" when i click the link ImageIndexMapper.zip above

Looks like the attachment got lost in this forum. Please try the cross post mentioned above. The attachment there still seems to work.

Share this post


Link to post
Guest
1 hour ago, Uwe Raabe said:

Please try the cross post mentioned above. The attachment there still seems to work.

Ah! But there i have to log in and i am not a member of the German-speaking "Praxis" 😞

My excuses for being a pain...

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×