Q&A

  • 컴포넌트를 배열로....
버튼을 배열로 사용을 하고 싶습니다..
같은 기능을 하는 버튼만 한 50개를 사용하기때문에 하나씩 다 등록해서 사용하면 구찮고 나중에 제어하려면 쓸다리없이 코드만 길어질거 같아서..
배열처럼 사용하고 싶습니다..
방법점 알려주세요..
2  COMMENTS
  • Profile
    김종화 2003.05.27 00:27



    function TForm_Print.CompNo(comp:string;no:integer):integer;
    var
       i, op     : integer;
       tt, comp1 : TComponent;
    begin
       comp1 := findcomponent(comp+inttostr(no));
       op:=-1;
       for i:=0 to componentcount-1 do begin
          Tt := Components[I];
          if tt=comp1 then begin op:=i; break; end;
       end;
       result:=op;
    end;
    //------------------------------------------------------------
    procedure TForm_Print.SetQRDBText(Sender : TADOQuery);
    var
       i, c, li_max : integer;
       com_tmp : TComponent;
    begin
       li_max := 0;
       for i := 0 to DetailBand1.ControlCount - 1 do
       begin
          if copy(DetailBand1.Controls[i].Name,1,9) = 'QRDBText_' then Inc(li_max);
       end;
       for i := 0 to li_max - 1 do    // QRDBText 의 개수 만큼 for 문 수행
       begin
          c := Compno('QRDBText_', i);
          com_tmp := Components[c];
          (com_tmp as TQRDBText).DataSet   := TADOQuery(Sender);
          (com_tmp as TQRDBText).DataField := TADOQuery(Sender).Fields[i].FieldName;
       end;
    end;



    Compno('QRDBText_', i);  
    이문장은 'QRDBText_' 문자열과 i 라는 숫자를 합쳐서 그 이름에 해당하는
    컴포넌트 번호를 구해오는 함수입니다. 직접 만들어 넣으셔야 하구여..
    그리구 그 담 내용처럼 사용하시면. 컴포넌트를 배열처럼 사용할수 있습니다.
    물론 컴포넌트 이름을 순차적으로 줘야 하구여..
  • Profile
    박수영 2003.05.26 23:40
    배열보다는 for를 사용하는 것이 어떨까하는데요...

    예문

    for i := 0 to CompomentCount - 1 do begin
       if Compoments[i] is TButton begin
           //명령......
       end;
    end;


    이렇게 하는 것이 더 효율적일것 같은데요...

    그리고 tag를 활용하면 약간의 다른 기능도 코딩할수 있구요