동적으로 컴퍼넌트를 만드는 작업을 하고 있습니다..
그래서 클래스를 만들어서 먼저 페이지 컨트롤을 만들고
그담에 탭시트를 만들고 각 탭시트 안에 DB그리드를 만들려고 합니다..
unit F_MyPageControl;
interface
uses
Windows, Classes, extctrls, comctrls, SysUtils, Controls;
type
TMyPageControl = class(TPageControl)
private
fGongListCD: TStringList;
fGongListNM: TStringList;
fPC_GB : Byte;
fInstance: TMyPageControl;
procedure MakePage_J;
protected
TabSheet_J : Array of TTabSheet;
property GongListCD: TStringList read fGongListCD write fGongListCD;
property GongListNM: TStringList read fGongListNM write fGongListNM;
property Instance: TMyPageControl read fInstance write fInstance;
property PC_GB: Byte read fPC_GB write fPC_GB;
public
constructor Create(AList : TStringList; BList: TStringList; APC_GB: Byte; AInstance: TMyPageControl);
destructor Destroy; override;
end;
implementation
uses F_MyPageControl_Main;
constructor TMyPageControl.Create(AList: TStringList; BList: TStringList; APC_GB: Byte; AInstance: TMyPageControl);
var
i : Integer;
begin
GongListCD := TStringList.Create;
GongListCD.Assign(AList);
GongListNM := TStringList.Create;
GongListNM.Assign(BList);
PC_GB := APC_GB;
Instance := AInstance;
if PC_GB = 0 then //페이지 컨트롤 만들기
begin
inherited Create(FMyPageControl_Main.Panel1);
parent := FMyPageControl_Main.panel1;
name := 'PC_J';
Align := alClient;
visible := true;
MakePage_J;
end;
end;
destructor TMyPageControl.Destroy;
begin
inherited;
try
GongListCD.Free;
GongListNM.Free;
except
end;
end;
procedure TMyPageControl.MakePage_J;
var
i: Integer;
aa : TPageControl;
begin
if PC_GB = 0 then //탭시트 만들기..
begin
SetLength(TabSheet_J,GongListCD.Count);
for i := 0 to GongListCD.Count - 1 do
begin
TabSheet_J[i] := TTabSheet.Create(FMyPageControl_Main.FindComponent('PC_J') as TPageControl);
TabSheet_J[i].PageControl := FMyPageControl_Main.FindComponent('PC_J') as TPageControl;
TabSheet_J[i].Name := GongListCD.Strings[i];
TabSheet_J[i].Caption := GongListNM.Strings[i];
TabSheet_J[i].PageIndex := i;
TabSheet_J[i].parent := FMyPageControl_Main.FindComponent('PC_J') as TPageControl;
TabSheet_J[i].Visible := True;
end;
end;
end;
end.
문제는요 생성해줄때 넘어온 AInstance의 값이 nil이더라구요..
그래서 다른 방법으로 FindCompernent를 사용할라고 해도 nil값만 넘어오고
이외에 다른 특별한 소스는 없습니다.(테스트중이라..)
가장 먼저 알고 싶은것은 저런식으로 생성을 한다면 먼저 생성된 페이지 컨트롤을 어떻게 아는지..
그리고 지금 하는 방법이 잘못 됐다면 약식으로 써주시면 고맙겠습니다.
클래스를 구조를 어덯게 해야한다던지..혼자하려니 힘드네염..
도와주세요~~~
public
constructor Create(AList : TStringList; BList: TStringList; APC_GB: Byte; AInstance: TMyPageControl); override;
이렇게 하심이....