Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[15729] BPL안에 정의되어 있는 Form을 상속받는 방법 좀 알려주세요.
첫눈 [hadugo] 1991 읽음    2016-06-15 12:13
인터넷에서 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안에 정의되어 있는 폼을 상속받아 버튼 클릭 이벤트를 재정의하고 싶은데 어떻게 해야 할지
고수님들의 도움 부탁드립니다.

+ -

관련 글 리스트
15729 BPL안에 정의되어 있는 Form을 상속받는 방법 좀 알려주세요. 첫눈 1991 2016/06/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.