{ Import from the DLL. }
procedure ShowMDIChildForm(App : TApplication);
external 'mdiforms.dll';
var
Form1: TForm1;
implementation
{$R *.DFM}
{ Create a child form contained in the DLL. }
procedure TForm1.ShowMDIChild1Click(Sender: TObject);
begin
//DLL함수 호출 부분
ShowMDIChildForm(Application);
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
end;
답변주셔서 감사합니다.
죄송하지만 제가 질문을 잘못한거 같군요 !
제 말은 메인폼에서 호출할 DLL폼이 MDIChild가 아니라 MDImain 이란거지요 !
그러니까
SDI폼( Application.mainform ) 에서 MDIMain속성을 DLL을 호출하여 그 안에서 MDI Child를 Create 하고 필요에 따라서 Application.mainform에 자료를 전송하는 방식을 구현하기 원한것이었습니다.
(기본적으로 델파이에서는 Main폼이 아닌것은 MDImain이 될수 없는걸로 알고있는데 이것을 코딩으로 할수 있는방법)
아래 코드는 파워러브델파이에 기고 되었던 MDI 차일드 폼을
DLL 로 사용하는 방법입니다만, 참고가 되셨음 좋겠군여
그럼~ 즐거운 프로그래밍 하시길~
Listing A. MDIForms.dpr
library MDIForms;
uses
SysUtils,
Classes,
Forms,
Windows,
//MDI Child폼의 실제 unit
ChildU in 'ChildU.pas' {ChildForm};
var
DLLApp : TApplication;
procedure MyDLLProc(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
{ DLL이 메모리에서 내려갈때}
{ 애플리케이션 포인터를 원위치 시킨다. }
if Assigned(DllApp) then
Application := DllApp;
end;
procedure ShowMDIChildForm(MainApp : TApplication);
var
Child : TChildForm;
begin
if not Assigned(DllApp) then
begin
DllApp := Application;
Application := MainApp;
end;
Child := TChildForm.Create(Application.MainForm);
Child.Show;
end;
exports ShowMDIChildForm;
begin
{ DllApp 변수를 초기화 한다. }
DllApp := nil;
DLLProc := @MyDLLProc;
end.
Listing B. MDIForms.dpr
unit MainAppU;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs, Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Test1: TMenuItem;
ShowMDIChild1: TMenuItem;
N1: TMenuItem;
Exit1: TMenuItem;
procedure ShowMDIChild1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
{ Import from the DLL. }
procedure ShowMDIChildForm(App : TApplication);
external 'mdiforms.dll';
var
Form1: TForm1;
implementation
{$R *.DFM}
{ Create a child form contained in the DLL. }
procedure TForm1.ShowMDIChild1Click(Sender: TObject);
begin
//DLL함수 호출 부분
ShowMDIChildForm(Application);
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
end;
end