Kyley

I did put '' around correct for a reason :-)

Neven

----- Original Message -----
From: "Kyley Harris" <[EMAIL PROTECTED]>
To: "Multiple recipients of list delphi" <[EMAIL PROTECTED]>
Sent: Wednesday, October 23, 2002 10:15 PM
Subject: RE: [DUG]: Polymorphic assignment to Color - How? (sometime it's a
Property, sometimes not)


> Well I mentioned 'one way' to do it. I guess Neven has mentioned
> 'another' way to do it.
>
> 'correct' is like skinning a cat. It depends on the question asked.
> While the interface method is potentially a cleaner way of doing
> something in a perfect world where all things are defined
> In a nice application Framework where the author has subclassed every
> visual control they ever want or might use, VCL or 3rd party to
> implement an interface.
>
> Giovanni's original question implied a generic, I don't want to know
> what I'm talking to, only
> That it has a property and is already an existing object in an existing
> architecture. Therefore correct is a matter of perspective within the
> given boundaries of the environment.
>
> In this case, based on the question, I think RTTI use to replace the one
> routine is more 'correct' than recommending refactoring an entire
> application of unknown quantity.
>
> IMHO
>
> Regards
>   Kyley
>
>
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:owner-delphi@;delphi.org.nz] On
> Behalf Of Neven MacEwan
> Sent: Wednesday, 23 October 2002 9:12 p.m.
> To: Multiple recipients of list delphi
> Subject: Re: [DUG]: Polymorphic assignment to Color - How? (sometime
> it's a Property, sometimes not)
>
>
> Giovanni
>
> The 'correct' way would be to implement an interface
>
> 1/ Declare the interface
>
> type
>   IPresentation = interface(IInterface)
>      procedure SetColor(Value: TColor);
>   end
>
> 2/ Implement the IF on your classes
>
> type
>   TColorableFrom = class(TForm, IPresentation)
>
> you then have the option of implementuing the interface or delegating it
> to an 'helper' object
>
> then to use it
>
> var
>   PesI: IPresentation;
>
> if Supports(Instance,IPresentation, PresI) then Pesi.SetColor(Color)
>
> HTH
>
> Neven
>
>
>
>
> ----- Original Message -----
> From: "Moretti, Giovanni" <[EMAIL PROTECTED]>
> To: "Multiple recipients of list delphi" <[EMAIL PROTECTED]>
> Sent: Wednesday, October 23, 2002 6:23 PM
> Subject: [DUG]: Polymorphic assignment to Color - How? (sometime it's a
> Property, sometimes not)
>
>
> > Hi
> >
> > I'm building a list of objects that can be coloured and want to be
> > able to
> get/set their colour.
> >
> > The object properties are all going to be stored in a Tlist so the
> > types
> will probably need to be stored along with them. I'm happy to store the
> Object type (eg Tform ...) along with the reference to the object but I
> can't see a general way to do this and get/set the color.
> >
> > ========= ATTEMPT #1 ===========================================
> >
> > In the olden days, before properties, I'd have just passed a pointer
> > to
> the Tcolor value:
> >
> >    procedure setObjectColour (Color     : ^TColor ;
> >                               newColour : TColor);
> >      begin
> >        Color^ := newColour;
> >      end;
> >
> >   setObjectColour(@Label3.Color, clRed);
> >
> > I tried this, but it's unpredictable as sometimes an object's color is
> just a TColor (a glorified integer) but other times it's a property with
> get/set methods.
> >
> > ========= ATTEMPT #2 ===========================================
> >
> > Figuring the run-time type information should be able to handle this,
> > I
> tried:
> >
> >   Type  TControlClass = Class of Tcontrol;
> >
> >   procedure setObjectColour ( obj       : TObject;
> >                               whatClass : TControlClass;
> >                               newColour : TColor);
> >   begin
> >     (obj as whatClass).color := newColour;
> >                            ^-------------- ERROR - COLOR not declared
> > // OR
> >
> >     whatClass(object).color  := newColour;
> >               ^----------------------------Missing Operator or ;
> >   end;
> >
> >   setObjectColour(Label3, Tlabel, clRed);  // To Recolour something
> >
> > But neither will compile without errors.
> >
> > ========= FINALLY ===========================================
> >
> > It's not elegant but has the great virtue that it actually works:
> >
> >   procedure setObjectColour ( obj       : TObject;
> >                               newColour : TColor);
> >   begin
> >     if      (obj is TForm)  then (obj as TForm) .color := newColour
> >     else if (obj is TLabel) then (obj as TLabel).color := newColour
> >     else if (obj is TFont ) then (obj as TFont) .color := newColour
> >     else if (obj is TBrush) then (obj as TBrush).color := newColour
> >     else if (obj is TPen)   then (obj as TPen)  .color := newColour
> >     else showMessage('setObjectColour: Don''t know how');
> >   end;
> >
> >   setObjectColour(Form1, clRed);
> >
> > Except this means that adding new types of things will require adding
> > of
> extra "if .." statements which with polymorphism should be necessary.
> Unfortunately you can't do the more general:
> >
> >    (obj as Tcontrol).color := newColour;
> >
> > As Tcontrol's "color" is protected (and can't be seen this won't
> > compile).
> Only Tcontrol's descendents expose some way of getting/setting color.
> >
> > I want to be able to recolour anything that has a colour but there
> > must be
> a better way than tests for explicit types/classes ...
> >
> > Any Ideas?
> >
> > Thanks
> > Giovanni
> > ======================================================================
> > ==
> > Giovanni Moretti  |  Institute of Information Sciences and Technology
> > Senior Lecturer   |  Massey University, Palmerston North, New Zealand
> > Computer Science  |  Ph 64-6-3505799x2474 == Fax 64-6-3502259 ==
> ZL2BOI
> >
> ------------------------------------------------------------------------
> > http://www-ist.massey.ac.nz/moretti
> mailto:G.Moretti@;massey.ac.nz
> >
> ------------------------------------------------------------------------
> --
> -
> >     New Zealand Delphi Users group - Delphi List -
> [EMAIL PROTECTED]
> >                   Website: http://www.delphi.org.nz
> > To UnSub, send email to: [EMAIL PROTECTED]
> > with body of "unsubscribe delphi"
> > Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/
> >
>
> ------------------------------------------------------------------------
> ---
>     New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
>                   Website: http://www.delphi.org.nz
> To UnSub, send email to: [EMAIL PROTECTED]
> with body of "unsubscribe delphi"
> Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/
>
> --------------------------------------------------------------------------
-
>     New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
>                   Website: http://www.delphi.org.nz
> To UnSub, send email to: [EMAIL PROTECTED]
> with body of "unsubscribe delphi"
> Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/
>

---------------------------------------------------------------------------
    New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
                  Website: http://www.delphi.org.nz
To UnSub, send email to: [EMAIL PROTECTED] 
with body of "unsubscribe delphi"
Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/

Reply via email to