Question

In Delphi 2007, images are loaded in a TImageList at design time. This introduces the following problem:

  • I have a folder containing the graphics I'm using in my application
  • Whenever I want to change, say, the icon for 'save', I have to
    1. Change the graphic in the folder (for my own purposes)
    2. Iterate along all TImageLists in the application
    3. Change the graphic in the TImageList

Is there any way (component, compile script, ...) to perform steps 2 and 3 automatically, that is, specify only paths of graphics at design time, creating a dependence on the actual graphic files?

Was it helpful?

Solution

You could create a descendant of TImageList and add that kind of logic there.

Since components referring to images inside a TImageList do that by index, it would be easiest to have your descendant to have a ImagePaths property of type TStrings that is formatted like this:

#=Filename

And maybe add a property BasePath of type string as well.

Then upon loading that component, it could automagically reload those images in memory.

You could even make it a design-time expert which loads the images in the designer.

--jeroen

OTHER TIPS

Classes are never fully compiletime. Designtime classes are streamed from resources too.

I load the images into the TImagelist at runtime. For this very reason, I do not assign any images at design time. They are all added as a resource to the exe and I load them at runtime from there. This also means that the images can be changed without recompiling the exe.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top