고수님들의 한수 부탁드립니다.
제가 지금 하고 싶은 것은... String Grid을 동적으로 생성하고 싶습니다.
그러니까, Data 개수가 20 개면 1개의 String Grid , 20개에서 40개면 2개...
이런식으로 만들고 싶습니다.
지금은 n개을 만들어 놓고, Visual을 True , False로 하는데...
한계가 있습니다.
어디서 부터 시작을 해야 할지... 도저히 모르겠습니다.
작성중인 소스의 일부입니다. 잘 읽어보시고 응용하시면 어떤 컴포넌트든지 실행시간에 같은 방법으로 생성할 수 있읍니다.
참고로, 각 이벤트의 선언부를 쉽게 작성할려면, 화면에 생성하고자 하는 컴포넌트를 한개 놓고 더블클릭해서 자동으로 만들어진 소스코드를 그대로 복사해서 사용하시면 됩니다.
잘 해결하시기 바라며.. 안되면 다시 질문해 주세요...
<!--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-->
고수님들의 한수 부탁드립니다. 제가 지금 하고 싶은 것은... String Grid을 동적으로 생성하고 싶습니다. 그러니까, Data 개수가 20 개면 1개의 String Grid , 20개에서 40개면 2개... 이런식으로 만들고 싶습니다. 지금은 n개을 만들어 ...
김춘경
•
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-->