[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