- Delphi 2010 이상
uses
.., Rtti;
procedure ChangeValue(obj: TObject);
var
Context : TRttiContext;
I : Integer;
begin
with Context.GetType(obj.ClassType) do
begin
for I := Low(GetProperties) to High(GetProperties) do //클래스의 프로퍼티를 모두 가져옵니다.
begin
if (GetProperties[i].Name = 'Text') or //원하는 프로퍼티를 찾습니다.
(GetProperties[i].Name = 'Caption') then
begin
GetProperties[i].SetValue(obj, 'Test!'); //프로퍼티에 값을 넣습니다.
//RTTI를 사용하여 타입캐스트 없이 (obj as TEdit).Text := 'Test!'; 와 (obj as TMemo).Text := 'Test!'; 를 한번에 해결할 수 있습니다.
Break;
end;
end;
end;
end;
ChangeValue(Edit1);
ChangeValue(Memo1);
ChangeValue(Panel1);
...
- Delphi7
uses
.., TypInfo;
procedure ChangeValue(obj: TObject);
begin
if GetPropInfo(obj, 'Caption') <> nil then SetPropValue(obj, 'Caption', '1234');
if GetPropInfo(obj, 'Text') <> nil then SetPropValue(obj, 'Text', '12345');
end;
ChangeValue(Edit1);
ChangeValue(Memo1);
ChangeValue(Panel1);
...