Uwe Raabe 2057 Posted October 18, 2018 (edited) 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 October 18, 2018 by Uwe Raabe 8 Share this post Link to post
Guest Posted October 30, 2018 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
Uwe Raabe 2057 Posted October 30, 2018 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. 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 Posted October 30, 2018 @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
Guest Posted November 30, 2018 @Uwe Raabe, i'm getting a "404" when i click the link ImageIndexMapper.zip above 😞 . Share this post Link to post
Uwe Raabe 2057 Posted November 30, 2018 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 Posted November 30, 2018 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
Uwe Raabe 2057 Posted November 30, 2018 No problem. I attach it here again. ImageIndexMapper.zip Share this post Link to post
haentschman 92 Posted December 1, 2018 Hi... Quote i am not a member of the German-speaking "Praxis" Why? It take 5 minutes... Share this post Link to post