[fpc-pascal] TFPColor vs TColor
Michael Van Canneyt
michael at freepascal.org
Tue May 5 09:30:51 CEST 2009
On Tue, 5 May 2009, Graeme Geldenhuys wrote:
> Hi,
>
> I'm looking at starting the conversion of fpGUI Toolkit's own Canvas
> and Image classes, to using the TFPCustomCanvas and related image
> classes.
>
> Looking at TFPColor as defined below.... I looked at using something
> similar to this in fpGUI, but soon realized that published properties
> of record type is not supported. So I ended up using similar to
> Lazarus and Delphi - TColor of type integer.
>
> ==============[ fpimage.pp ]===============
>
> Color being of type TFPColor and the values in brackets are always in
> R, G, B, A order (no matter the platform). I have seem many theme
> config files under Linux using a similar format for storing color
> values. Is this possible with the Reader/Write? But first we have to
> address the problem of the TFPColor not being able to be published.
>
>
> So in summary:
>
> * What's the point of TFPColor when we cannot publish it.
When designing FPCanvas and so on, streaming was not taken into consideration
at all. The point was to be able to represent all possible colors, independent
of a GUI system or streaming system.
> * Can the Reader/Writer support TFPColor
No, because records cannot be published. To do this, you'd need something
like a TGUIColor wrapper, which is a TPersistent:
TGUIColor = Class(TPersistent)
Private
FColor : TFPColor
Public
Property Color : TFPColor Read FColor Write FColor;
Published
Property Red : Word Read FColor.Red Write FColor.Red
// Same for blue,green,alpha
end;
Publish a property TGUIColor for streaming, but use it's color property
when drawing.
Another possibility would be
TMyColor = Int64
publish this, and typecast in the getter/setter to/from TFPColor.
Personally, I'd go for the first option.
Michael.
More information about the fpc-pascal
mailing list