Q&A

  • 컴포넌트 이름비교방법?
질문입니다..
컴포넌트 네임에서 첫번째 글자부터 6번째 글자까지만 가져와서
그 이름을 검사하고픈데요...
예를 들어서 panel1_1,panel1_2,panel1_2,panel2_1,panel2_2,panel3_1,
panel3_2 이렇게 정의된
컴포넌트들의 이름이 있다고 가정하구
각 컴포넌트의 네임의 첫글로부터 6번째 글자까지만 비교하여... 거기에
해당하는 프로그램을 구현하고픈데요...
그러니까... panel1_1 이렇게 있다면 여기서 _1를 빼구 panel1 이름만
가져와서 다른거와  비교하는거죠...
if panel1 then...
else if panel2 then...
....

방법이 뭔지 좀 알려주세요...
2  COMMENTS
  • Profile
    nilriri™ 2002.03.20 02:26
    어떤 용도인지 궁금하군요..
    판넬인지 명령버튼인지 에디트 박스인지를 구분하고자 그러신다면..
    아래처럼..ClassName 을 이용하면 어떨까요?

    아래소스는..
    판넬 처럼 컨테이너 컨트롤로 묶여 있다면..
    아래 함수에 해당 컨트롤을 넣어주면 해당 컨테이너 컨트롤에
    포함된 컨트롤들의 클래스 명을 검사해서 원하는 작업을 해주는 함수입니다.
    그럼..

    Procedure Tacc0301f.FormClear(Obj: TComponent);
    var
        i : integer;
        Control : TControl;
    begin
        for i:= 0 to TWinControl(Obj).ControlCount-1 do
        begin
            Control := TWinControl(Obj).Controls[i];
            if (Control.ClassName = 'TPanel') then
            begin
                FormClear(Control);
            end;
            if (Control.ClassName = 'TEdit') Or
               (Control.ClassName = 'TMaskEdit') Or
               (Control.ClassName = 'TValEdit') Or
               (Control.ClassName = 'TMemo') then
            begin
                TEdit(Control).Clear;
                TEdit(Control).Hint := '';
                TEdit(Control).Ctl3D := False;
            end;
        end;
    end;


  • Profile
    김경록 2002.03.20 01:38
    음...
    일단은 '_' 문자를 없애는 함수를 작성하셔야겠네여..

    Function ReplaceStr(Source, RepChar, DestChar: String): String
    Var
         ls_Temp: String;
         K: String;
    begin
          ls_Temp := '';
          For K := 1 To Length(Source) Do
          Begin
                 If Source[K] <> RepChar Then
                     ls_Temp := ls_Temp + Source[K]
                 Else
                     ls_Temp := ls_Temp + DestChar;
          End;

          Result := ls_Temp;
    end;


    사용법은 아시겠져?   ReplaceStr(원래문자, 바꿀대상문자, 바꿀문자)
                                  예)  ReplaceStr('2001-03-01', '-', '/')
                                        ReplaceStr('2001-03-01', '-', '')


    근데여..  원하는 컴포넌트 네임을 알고난 다음에 어떻게 처리할건지
    알 수 없으니.. 다음 코딩은 해드리기 어렵네여..
    그래서.. 참고할 만한 거만 갈켜드리져..

    Var
         L: LongInt;
         ls_PanelName: String;
    Begin
          For L := 0 To Form명.ComponentCount - 1 Do
          Begin
               If Form명.Components[L] is TPanel Then  //컴포넌트가 페널인가?
               Begin
                     ls_PanelName := ReplaceStr((Form명.Components[L] as TPanel).Name, '_', '');
                     if (ls_PanelName = 찾고자하는 이름이면) then
                     begin
                             뭔가를 여기에 처리하는 루틴을 쓰면 되겠져?
                     end;

               End; //If문 End
          end; //For문 end
    End;


    결론적으로 위의 코딩에 대한 약소한 설명은..
    해당 폼에는 자신이 소유하고 있는 모든 컴포넌트를 가지고 있답니다..
    따라서, 그 컴포넌트를 그 소유자의 속성에서 찾을 수 있습니다.
    컴포넌트에도 마찬가지로 자신이 소유하고 있는 컴포넌트가 있다면,
    그 컴포넌트를 억세스할 수 있습니다.
    답이 되셨는가 모르겠네여..


                         최강의 프로그래머를 위하여~~~