[fpc-devel] Propose: change TComponent.Tag from longint to PtrInt
Bram Kuijvenhoven
kuifwaremailinglists at xs4all.nl
Wed Sep 6 08:50:47 CEST 2006
Michael Van Canneyt wrote:
>> I don't consider storing a pointer in the tag is broken code, it was
>> considered the accepted way to maintain a pointer to your custom data
>> from a
>> standard control and there is often no simple alternative.
>
> Accepted only because there was no other way.
>
> The only correct way is to introduce an additional field 'UserData', of
> type Pointer.
I think this is an excellent solution. Casting Tags to pointer is/was bad practice anyway.
The Tag can still be used for association of user data with a component, but then as an index to a lookup table which holds the actual pointer. That is a portable solution (though it requires a little more memory and code). So adding a UserData field will be helpful.
If we really want to save memory usage, we can even let a UserData (public) property and the Tag (published) property use the same field. Tag will then be an interface to the lowest 32 bits of a pointer field, which is simply stored/read in a whole by UserData. But this is of course a hack which is more likely to confuse programmers and cause problems in the future, so I wouldn't particularly recommend it...
Regards,
Bram Kuijvenhoven
More information about the fpc-devel
mailing list