[lazarus] Setting a value using RTTI

Shane Miller SMiller1 at stvgb.org
Fri Dec 1 10:36:18 EST 2000


Cool.  Thanks.  I got it to work with the visible property and the NAME property but doing the CAPTION causes it to crash.  Trying to do the TOP parameter does nothing along with HINT and a few others.

Not sure why.  
Feel free to examine my code.  I will continue to look at it.

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