Q&A

  • String Grid 동적 생성
고수님들의 한수 부탁드립니다.
제가 지금 하고 싶은 것은... String Grid을 동적으로 생성하고 싶습니다.
그러니까, Data 개수가 20 개면 1개의 String Grid , 20개에서 40개면 2개...
이런식으로 만들고 싶습니다.
지금은 n개을 만들어 놓고, Visual을 True , False로 하는데...
한계가 있습니다.
어디서 부터 시작을 해야 할지... 도저히 모르겠습니다.

한수 부탁 드립니다.
1  COMMENTS
  • Profile
    김춘경 2005.10.06 08:21
    작성중인 소스의 일부입니다. 잘 읽어보시고 응용하시면 어떤 컴포넌트든지 실행시간에 같은 방법으로 생성할 수 있읍니다.
    참고로, 각 이벤트의 선언부를 쉽게 작성할려면, 화면에 생성하고자 하는 컴포넌트를 한개 놓고 더블클릭해서 자동으로 만들어진 소스코드를 그대로 복사해서 사용하시면 됩니다.

    잘 해결하시기 바라며.. 안되면 다시 질문해 주세요...

    <!--CodeS-->
      private
        { Private declarations }
        procedure Create_DivisionBar;
        procedure Click_Div_EDT(Sender: TObject);
        procedure KeyDown_Div_EDT(Sender: TObject; var Key: Word; Shift: TShiftState);
      public
        { Public declarations }
        procedure RUN_Click_DivBAR(KEY_No: integer);


    implementation

    uses DataModule_U;

    {$R *.dfm}

    // 반드시 전역변수로 선언...
    const
      Div_QTY = 50;

    var
      Div_PNL: array[1..Div_QTY] of TPanel;
      Div_EDT: array[1..Div_QTY] of TEdit;

      CurrentSEL_: integer;

    procedure TfrmGoodsDivision.Create_DivisionBar;
    var
      bTop, i: integer;
    begin
      bTop  := 2;
      for i := 1 to Div_QTY do begin
        Div_PNL[i] := TPanel.Create(Self);
        with Div_PNL[i] do begin
          Parent      := ScrollBox1;
          Tag         := i;
          Height      := 30;
          Width       := 300;
          Top         := bTop;
          Left        := 2;
          Color       := clWhite;
          Font.Charset:= ANSI_CHARSET;
          Font.Style  := [fsBold];
          Font.Name   := 'Arial';
          Font.Size   := 12;
          Font.Color  := clBlack;
          Caption     := '  ' +CodeSet(i, 2);
          bTop        := bTop +32;
          OnClick     := Click_Div_PNL;
        end;

        Div_EDT[i] := TEdit.Create(Self);
        with Div_EDT[i] do begin
          Parent      := Div_PNL[i];
          Tag         := i;
          BorderStyle := bsNone;
          Ctl3D       := False;
          Color       := clGray;
          Font.Size   := 10;
          Font.Name   := '굴림';
          Font.Style  := [fsBold];
          Font.Color  := clBlack;
          MaxLength   := 50;
          Top         := 9;
          Left        := 40;
          Height      := 15;
          Width       := 256;
          OnClick     := Click_Div_EDT;
          OnKeyDown   := KeyDown_Div_EDT;
        end;
      end;
    end;

    procedure TfrmGoodsDivision.Click_Div_PNL(Sender: TObject);
    var
      TempButton: TPanel;
    begin
      TempButton := TPanel(Sender);
      RUN_Click_DivBAR(TempButton.Tag);
    end;

    procedure TfrmGoodsDivision.Click_Div_EDT(Sender: TObject);
    var
      TempButton: TEdit;
    begin
      TempButton := TEdit(Sender);
      RUN_Click_DivBAR(TempButton.Tag);
    end;

    procedure TfrmGoodsDivision.RUN_Click_DivBAR(KEY_No: integer);
    begin
      if CurrentSEL_ >0 then begin
        Div_PNL[CurrentSEL_].BorderWidth := 1;
        Div_PNL[CurrentSEL_].Font.Color := clBlack;
      end;
      CurrentSEL_ := Key_No;

      if CurrentSEL_ >0 then begin
        Div_PNL[CurrentSEL_].BorderWidth := 3;
        Div_PNL[CurrentSEL_].Font.Color := clBlue;
        Div_EDT[CurrentSEL_].SetFocus;
        Div_EDT[CurrentSEL_].SelStart := Length(Div_EDT[CurrentSEL_].Text) +1;
      end;
    end;

    procedure TfrmGoodsDivision.KeyDown_Div_EDT(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    var
      TempButton: TEdit;
    begin
      TempButton := TEdit(Sender);
      if (Key =VK_UP) and (CurrentSEL_ >1) then Click_Div_EDT(Div_EDT[CurrentSEL_ -1]);
      if ((Key =VK_RETURN) or (Key =VK_DOWN)) and (CurrentSEL_ <Div_QTY) then Click_Div_EDT(Div_EDT[CurrentSEL_ +1]);
    end;



    procedure TfrmGoodsDivision.FormCreate(Sender: TObject);
    begin
      (***  RUNTIME COMPONENTS CREATE  ***)
      Create_DivisionBar;  // 화면 생성부에서 호출
    .
    .
    .
    . [중략]
    <!--CodeE-->