일단은 읽어주셔서 감사합니다.
DLL에 form을 만들고 MDI Main에서 그 form을 MDIChild로 call하는 것은
'파워러브 델파이 98년8월호'의 소스를 이용하여 성공했습니다.
그러나 기쁨도 잠시...
Button에서 call을 하고나면(MDIChild form call 함수 from DLL: ShowMdiChildForm)
호출한 button이 사라지고 마는 것이어요...
어데로 갔나 나의 버튼...?
그래서 버튼이 정말로 사라졌는지(free or destroy) components[]에서 뒤져보면 있거던요..? Button1.Click도 되고...
그런데 menu에서 그 함수를 call하면 menu는 그대로 있어요...
그래서 ShowMdiChildFrom을 call하고나서 repaint를 호출하니
application이 사라지네요..?? 참내..task bar에는 있는데...
무엇이 문제일까요...?
비슷한 일을 당하신 분은 꼭 연락을 좀 주세요...
참고로 제 source는 다음과 같아요.
MDIMain 부분(DLL call하는 form : fsMDIForm)
================================================
procedure ShowMDIChildForm(App : TApplication);external '../AboutDll/About.DLL';
implementation
{$R *.DFM}
procedure Call_DllForm(TF : Boolean);external '../AboutDll/About.DLL'
name 'Call_DllForm';
. . . . .
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMDIChildForm(Application);
end;
============================
DLL source
library About;
uses
SysUtils,
Dialogs,
Classes,
ShellAPI,
Windows,
Forms,
Unit1 in 'Unit1.pas' {DLLForm1};
var
DLLApp : TApplication;
procedure MyDllProc(Reason : Integer);
begin
if Reason = DLL_PROCESS_DETACH then
if Assigned(DllApp) then
Application := DllApp;
end;
procedure ShowMDIChildForm(MainApp : TApplication);
var
Child : TDLLForm1;
begin
if not Assigned(DllApp) then
begin
DllApp := Application;
Application := MainApp;
end;
Child.Visible := False;
Child := TDLLForm1.Create(Application.MainForm);
Child.FormStyle := fsMDIChild ;
Child.Visible := True;
end;
exports
ShowMDIChildForm;
begin
DllApp := nil;
DLLProc := @MyDLLProc;
end.
========== 이상 ===============