Q&A

  • 컴퍼넌트 타입? 암튼 이 속성을 알아내는방법...
예를 들어서 My_Name이라는 Name으로 컴퍼넌트가 있는데 이컴퍼넌트가
TEdit인지..TMemo인지..TComboBox인지등등를 알아내서 변수에 값을 넣고싶은데..

어떻게 해야할까여...

과정은 이렇습니다. 사용자로 하여금 Edit로 입력을 받아서 입력한 것이 컴퍼넌트이름이고 그 이름으로된것이 TEdit인지.. TCombobox인지를 알아내서 색상을 바꾸려합니다.
물론 색상또한 사용자로 하여금 선택받는것이구여!
결론:프로시저(컴퍼넌트이름, 색깔);이케 보내는거죠!
그럼 프로시저는 컴퍼넌트이름과 색깔을 받아서 처리를하는것이죠!
제가 해본것은..
procedure TForm1.Button5Click(Sender: TObject);
var
   AEdit: TEdit;
   AName: string;
begin
    AName:= Combobox2.Text;
    AEdit:= Self.FindComponent(AName) as TEdit;
    if AEdit<>nil then
      AEdit.Color := clBlue
      Memo_Name(AEdit, clBlue);
    else
      ShowMessage(AName + '의 컴퍼넌트가 없습니다.');
end;
--근데 문제는 ComName이 TEdit인지..TCombobox인지를 알아야 넘길텐데...
--지금 위의 것은 TEdit일 경우만입니다.TCombobox인경우는 안됩니다.
procedure Memo_Name(ComName : TMemo ; Col : TColor);--여기에 값을 넘겨야합니다.
begin
  ComName.Color := Col;
end;

end.
3  COMMENTS
  • Profile
    이중철 2005.02.05 01:07
    TEdit 또는 TCombobox들은 어차피 TControl에서 상속 받은 클래스
    이므로 TControl 으로 모든것을 처리해도 상관 없습니다.
    procedure TForm1.Button5Click(Sender: TObject);
    var
       ACont: TControl;
    begin
        ACont := TControl(Self.FindComponent(Combobox2.Text));
        if ACont <>nil then
          ACont.color := clBlue
        else
          ShowMessage(AName + '의 컴퍼넌트가 없습니다.');
    end;

  • Profile
    이중철 2005.02.05 01:21
    아참 질문의 내용만으로 답변드릴께요
    procedure TForm1.Button5Click(Sender: TObject);
    var
       ACont : TControl;
       AName : string;
    begin
       ACont := TControl(Self.FindComponent(Combobox2.Text));
       ShowMessage(ACont.ClassName); // 클래스명 나옴
       if Acont is Tedit then  // 해당 클래스인지 확인 ^^
       ......  
    end;


  • Profile
    김현철 2005.02.05 02:28
    procedure TForm1.Button5Click(Sender: TObject);
    var
       ACont : TControl;
       AName : string;
       Color : TColor;
    begin
       ACont := TControl(Self.FindComponent(Combobox2.Text));
       --Edit1.Text := ACont.Name + ACont.ClassName; // 클래스명 나옴
      case Combobox3.ItemIndex of
        0 : Color := clred;
        1 : Color := clblue;
        2 : Color := clyellow;
      end;
      if Acont is Tedit then                   Edit_Name(ACont.Name , Color) // 해당 클래스인지 확인 ^^
      else if Acont is TComboBox then Combo_Name(ACont.Name, Color);
      else if Acont is TMemo then        Memo_Name(ACont.Name, Color);
    end;
    --아래의 프로시저로 넘길려고하는데.. 왜 안넘어 가져! ㅡ.,ㅡ
    procedure Edit_Name(ComName : TEdit ; Col : TColor);
    begin
      ComName.Color := Col;
    end;