Jump to content

Uwe Raabe

Members
  • Content Count

    2542
  • Joined

  • Last visited

  • Days Won

    147

Posts posted by Uwe Raabe


  1. 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.


  2. Is there a possibility that I get redirected to the comment I clicked on the the stream instead to the top of the thread? Better to the first unread comment in that stream. I think that is the behavior of the German forum: When I click an entry in the portal I end up at the first comment in that thread I have not read yet.


  3. 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

    • Thanks 9
×