Hi

Thanks to you all for your help and the tutorial on interfaces which was very handy as 
I'm still wrapping my mind around them (apart from this problem).

I decided to use Kyley's RTTI interrogation technique - I understand what it's doing 
whereas my OO development is still digesting interfaces. In due course I may go the 
interface way, but for the moment, the RTTI method will suffice. 

I decided to check the functions worked as I expected by creating my own object 
(rather than using Form/Panel, Font background ...)

I defined a minimal object with get/set properties and tried to use it (see skeletal 
code below). Compiled fine but gave a "Doesn't have a Colour Property" message, which 
means that IsPublishedProp is returning nil.

After wandering around the help system on RTTI I went home and the answer (well a 
solution anyway) came while I was driving. I was pondering on why the system-defined 
objects were fine and mine wasn't. Answer - they're all derived from TComponent. Even 
though the property is public and published, for "IsPublishedProp()" to work, the 
class (apparently) has to be a descendent of TComponent, TObject won't work. 

So now I have a method I can use for both VCL objects and those I create.

I greatly appreciate your help

Thank you all

Giovanni 
CompSci - Massey Uni

==========================================================
// TMyColourSetTester = class(TObject) <= FAILS AT RUNTIME

   TMyColourSetTester = class(TComponent) <= WORKS FINE
    private
       MyColour         : TColor;
       function  GetCol : TColor;
       procedure SetCol (value : TColor);
    public
       constructor create; // just calls inherited create
    published
        property
          color : TColor read GetCol write SetCol;
    end;
 
procedure SetObjectColour (name      : string; 
                           AObject   : TObject; 
                           newColour : TColor);
var result : boolean;
    propinfo : PPropInfo;
    classTypeInfo : PTypeInfo;
begin
  result   := IsPublishedProp(AObject,'color');
  If result then SetOrdProp(AObject,'Color',newColour)
  else showmessage(name+' doesn''t have a Color property');
end;

var Coltester : TMyColourSetTester;

  ColTester:= TMyColourSetTester.create;
  ColTester.color:= clYellow;  // Make sure it goes

  setObjectColour('ColTester', ColTester, clAqua);

==========================================================
---------------------------------------------------------------------------
    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