delphi typinfo SetPropValue
Hi I have a problem with this code:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ActnList, StdCtrls, Buttons, MSObjCtrls, StrUtils;
type
Data = class(TObject)
FName : string;
FValue : string;
private
public
published
property Name : string read FName write FName;
property Value : string read FValue write FValue;
end;
type
TForm1 = class(TForm)
edtResult : TMSObjectText;
btnGo : TMSBitBtn;
ActionList1 : TActionList;
acGo : TAction;
procedure acGoExecute(Sender : TObject);
private
procedure Split(Delimiter, S : string; Strings : TStrings);
public
{ Public declarations }
end;
var
Form1 : TForm1;
implementation
uses TypInfo;
{$R *.dfm}
procedure TForm1.Split(Delimiter, S : string; Strings : TStrings);
var
P, OldP : integer;
Token : string;
begin
if (Strings = nil) or (Length(S) = 0) or (Length(Delimiter) = 0) then
exit;
P := Pos(Delimiter, S);
OldP := 1;
while P > 0 do
begin
Token := Copy(S, OldP, P - OldP);
Strings.Add(Token);
OldP := P + 1;
P := PosEx(Delimiter, S, OldP);
end;
if P = 0 then
Strings.Add(Copy(S, OldP, Length(S)));
end;
procedure TForm1.acGoExecute(Sender : TObject);
var
Lst, tmpLst : TStringList;
i : Integer;
Obj : Data;
str : string;
begin
str := 'Name=Jordan Borisov;Value=man';
Lst := TStringList.Create;
tmpLst := TStringList.C开发者_如何学Goreate;
Split(';', str, Lst);
Obj := Data.Create;
for i := 0 to Lst.Count - 1 do
begin
Split('=', Lst[i], tmpLst);
try
SetPropValue(Obj, tmpLst[0], tmpLst[1]);
except
ShowMessage(Format('Invalid property name %s', [tmpLst[0]]));
end;
tmpLst.Clear;
end;
edtResult.Text := 'Name[' + Obj.Name + '],Value[' + Obj.Value + ']';
end;
end.
Could someone tell me where is the problem?
Thanks in advance!
RTTI is generated for classes compiled with {$TYPEINFO ON}
(or {$M+}
) directive. TObject
is not one of them; it starts at TPersistent
. So either derive your class from TPersistent, or use the {$M+}
directive in your code (before the declaration of your class).
精彩评论