인터넷에서 BPL에 정의되어 있는 폼을 불러오는 방법을 찾아보니 아래와 같은 방법 뿐입니다.
//================================= Test.bpl ===================================
.....
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
end;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := 'Button1';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text := 'Button2';
end;
initialization
RegisterClass(TForm1);
finalization
UnRegisterClass(TForm1);
//===================================== BPLLoader.dproj =================================
.........
Var
PackageModule : HMODULE;
AClass : TPersistentClass;
FormClass : TFormClass;
Form : TForm
begin
PackageModule := LoadPackage('Test.bpl');
AClass := GetClass('TForm1');
FormClass := TFormClass(AClass);
Form := FormClass.Create(Application);
Form.ShowModal;
Form.Free;
UnloadPackage(PackageModule);
end.
인터넷을 아무리 뒤져도 위와 같은 방법 뿐입니다.
위에 보이는 것 처럼 Button1과 Button2의 Click이벤트가 BPL안에 정의되어 있습니다.
BPL을 불러들이는 쪽에서는 그냥 BPL안에 정의되어 있는 폼을 불러와 화면에 띄워주는 것 이외에는 아무것도 할 없으니
굳이 폼을 BPL로 분리시키는 것이 소스코드만 복잡하게 하고 디버깅만 복잡해 질뿐 아무런 도움이 되지 않습니다.
그래서 제가 원하는 것은
BPL안에 있는 폼을 직접 Create하는 것이 아니고
BPL안에 정의되어 있는 폼을 상속받아 새로운 폼을 생성하려 합니다.
그렇게 하기 위해 아래와 같이 했습니다.
//================================= Test.bpl ===================================
.....
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
end;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
//버튼의 클릭이벤트는 BPL에서 선언만 해놓고 BPL을 불러들이는 쪽에서 처리...
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//버튼의 클릭이벤트는 BPL에서 선언만 해놓고 BPL을 불러들이는 쪽에서 처리...
end;
initialization
RegisterClass(TForm1);
finalization
UnRegisterClass(TForm1);
//===================================== BPLLoader.dproj =================================
......
type
TForm2 = class(TForm1)
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TForm2Class : Class Of TForm2;
procedure TForm2.Button1Click(Sender: TObject);
Begin
Edit1.text := 'Button1';
End;
procedure TForm2.Button2Click(Sender: TObject);
Begin
Edit1.text := 'Button2';
End;
Var
PackageModule : HMODULE;
AClass : TPersistentClass;
Form2Class : TForm2Class;
Form2 : TForm2;
begin
PackageModule := LoadPackage('Test.bpl');
AClass := GetClass('TForm1');
Form2Class := TForm2Class(AClass);
Form2 := Form2Class.Create(Application);
Form2.ShowModal;
Form2.Free;
UnloadPackage(PackageModule);
end.
하지만 위 소스코드는
Button1Click이벤트와 Button2Click는 실행되지가 않습니다.
BPL안에 정의되어 있는 폼을 상속받아 버튼 클릭 이벤트를 재정의하고 싶은데 어떻게 해야 할지
고수님들의 도움 부탁드립니다.