您好我的代码有问题:
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.Create;
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.
有人能告诉我问题出在哪里吗?
提前致谢!
答案 0 :(得分:1)
为使用{$TYPEINFO ON}
(或{$M+}
)指令编译的类生成RTTI。 TObject
不是其中之一;它从TPersistent
开始。因此要么从TPersistent派生你的类,要么在代码中使用{$M+}
指令(在你的类声明之前)。