Create TImageList by specifying paths only
-
22-07-2019 - |
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
- Change the graphic in the folder (for my own purposes)
- Iterate along all TImageLists in the application
- 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?
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.