본문 바로가기

Delphi/꿀팁

타입캐스트 없이 컴포넌트 한번에 컨트롤하기 - 1

- 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);

...


반응형