您好我有這個代碼的問題:德爾福typinfo SetPropValue
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.
有人能告訴我問題出在哪裏?
在此先感謝!
如果您告訴我們什麼不起作用,您會得到更好的答案。它不會編譯?它不是做你想做的事嗎?問題是什麼? –
對不起,我忘了。 問題是,在SetPropValue方法中,我嘗試爲類Data中的屬性Name設置一個新值,但每次都使用文本引發一個異常:Property Name不存在。 –
需要在acGoExecute中釋放Lst和tmpLst。 –