[Lazarus] Raw TBitmap objects vs LCL TBitmap properties inconsistencies
Giuliano Colla
giuliano.colla at fastwebnet.it
Wed Sep 12 17:47:37 CEST 2018
Hi Lazarus experts,
I have noticed a number of apparent inconsistencies which make life a
bit complicate if you need to play with visual properties of LCL components.
If you need a different canvas brush, you need to change a button glyph,
or to dynamically change a TImage (just to make a few examples), you
create your TBitmap, and with a simple assignment instruction you pass
it to the component. It works and it's Ok.
But then you're faced with a problem: what to do with the TBimap object
you have created?
Coming from Delphi I had assumed that a TBitmap is not copied on another
one, but just the pointer to the underlying Handle is copied. This means
that you should never free a TBitmap after copying.
But if you use heaptrc you discover that a number of your TBitmaps are
still there after closing all the forms.
On the other hand, in some cases if you FreeAndNil a TBitmap which has
just been copied to an LCL component you get a crash with an AV.
Up to now my solution has been to enable heap trace, let heaptrc tell me
what I need to free, and do it just for those bitmaps.
Is there a better way? i.e. what is the logic behind some LCL components
just taking the pointer of a TBitmap and some to create their own
internal bitmap leaving the original TBitmap untouched?
Giuliano
--
Do not do to others as you would have them do to you.They might have different tastes.
More information about the Lazarus
mailing list