[lazarus] Setting a value using RTTI

Shane Miller SMiller1 at stvgb.org
Fri Dec 1 14:19:43 EST 2000


If you are going to add a 

procedure SetProp(Instance: TObject; const PropName: string;const Value: string);

can you add a 
procedure SetSetProp(Instance: TObject; Index : Intger;const Value: string);

That way I don't have to do a thing!  :-)

I have TComponentInterface setup to set Boolean, Integers, Floats, Methods and strings.  The functions seem to work but setting certain properties seems to fail.

I successfully set a Method so that was pretty cool.

Shane


>>> michael.vancanneyt at wisa.be 12/01/00 07:44AM >>>


On Fri, 1 Dec 2000, Shane Miller wrote:

> Question for all:  
> 
> Using RTTI howdo I set a property value?
> In my source code for TComponentInterface.SetPropbyName
> I get the PPropinfo record for the property VISIBLE and
> I check the Setproc variable.  It's <> nil so I need
> to call it somehow.  I have a TMySetProc type that is a
> 
> Procedure (const value) of Object;
> 
> In TComponentInterface I have a variable MySetProc of type TMySetProc.  I assign MySetProc by....
> 
> MySetProc := TMySetProc(SetProc^);
> 
> then I call it
> 
> MySetProc(Value);
> 
> It crashes.  Thoughts?

The correct way to do this is using setordprop:

procedure SetOrdProp(Instance : TObject;PropInfo : PPropInfo;  Value : Longint);

You could do like this;

// Easy access function:

function GetPropInfo(Instance: TObject; const PropName: string): PPropInfo;
begin
  Result := GetPropInfo(Instance.ClassType, PropName);
end;

Actual code:

begin
  SetOrdProp(Instance,GetPropInfo(Instance),Ord(Value))
end;  

Only use the SetXXXprop functions to set properties, don't start looking in
the propinfo records.

I will enhance the typinfo unit ASAP, so functions of the kind
procedure SetSetProp(Instance: TObject; const PropName: string;const Value: string);

are available. They were introduced in Delphi 5 as well; you could then
use these functions.

Michael.

_________________________________________________________________
     To unsubscribe: mail lazarus-request at miraclec.com with
                "unsubscribe" as the Subject
    archives at http://www.miraclec.com/list_archives/lazarus






More information about the Lazarus mailing list