[fpc-devel] Propose: change TComponent.Tag from longint to PtrInt

Marc Weustink marc.weustink at cuperus.nl
Mon Sep 4 13:54:42 CEST 2006


Michael Van Canneyt wrote:
> 
> 
> On Mon, 4 Sep 2006, peter green wrote:
> 
>>
>>>
>>>> Me2.
>>>>
>>>> Just one disadvantage:
>>>> The Tag is published.
>>>> If someone stores a 64bit value and the component is stored,
>>>> the stream can not be read under 32bit anymore.
>>>
>>> ...which makes it impossible to use streams for anything derived from
>>> Tcomponent, which is really a lot. I don't think we should break this
>>> feature to allow broken code to work.
>> ahh the joys of conflicting requirements,
>>
>> 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.
> 
> A pointer cannot be stored anyway at design-time, so it does not need to 
> be published.
> 
> Remains the decision where you introduce this pointer: TComponent, 
> TControl.
> 
> IMHO, you should introduce TLCLComponent, add it there, and descend all 
> LCL components from that.

TLCLComponent is already exists (it's only not committed yet.
Adding a UserData to it is maybe an idea.
THis will work for most compoenents, except DB components for instance.

Marc




More information about the fpc-devel mailing list