ShowMessage('Deneme');
kodu yerine bu veri tabanı ile alakalı işlemleri koyacağım. Benim sorunum dinamik olarak dll li çağırabiliyorum. Fakat Dll deki formu kapattıktan sonra tekrar açmak istediğimde Dll yerine ana formu açıyor.

MDITab.AddTab(F_AnaSayfa.ActiveMDIChild);
Bu kod TAdvOfficeMDITabSet diye bi componente formu ekliyor. Dediğim gibi eğer Dll deki formu kapatıp tekrar açmaya çalışırsam MDITab'a kendini ekliyor.
Yardımcı olacak arkadaşlara şimdiden çok teşekkür ederim.
Kod: Tümünü seç
//MDI Ana Formu
procedure TF_AnaSayfa.DinamikDLLYukle(DllAdi:String);
type
TDllPrc = Function (MainApp : TApplication; Formname:string;Hand:Cardinal):TForm;stdcall;
var
PrcMDI :TDllPrc;
begin
if FileExists(D_Data.T_ModulAgaciDllName.Value + '.dll')
then
begin
DLLHandle := SafeLoadLibrary(DllAdi + '.dll');
if DLLHandle<>0
then
begin
@PrcMDI := GetProcAddress(DLLHandle , 'ShowMDIChild');
if @PrcMDI <> nil then MDITab.AddTab(PrcMDI(Application,'F_' + DllAdi,DLLHandle));
end;
end
else
begin
ShowMessage('Deneme');
end;
end;
procedure TF_AnaSayfa.AgacDblClick(Sender: TObject);
begin
DinamikDLLYukle(D_Data.T_ModulAgaciDllName.Value);
MDITab.AddTab(F_AnaSayfa.ActiveMDIChild);
end;
//DLL
library Order;
uses
SysUtils,
Windows,
Classes,
Forms,
Dialogs,
Frm_Order in 'Frm_Order.pas' {F_Order};
{$R *.res}
var
DllApp : TApplication;
Function ShowMDIChild(MainApp : TApplication; Formname:string;Hand:Cardinal):TForm; stdcall;
begin
if not Assigned(DllApp)
then
begin
DllApp := Application;
Application := MainApp;
end;
if Formname='F_Order'
then
begin
if not assigned(F_Order)
then
begin
F_Order := TF_Order.Create(Application.MainForm);
Result:=F_Order;
F_Order.Tag:=Hand;
F_Order.Show;
end
else
begin
F_Order.Show;
end;
end
else
begin
ShowMessage(Formname+' Bu Form Kütüphanede Bulunamıyor');
end;
end;
procedure MyDLLProc(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH
then
begin
if Assigned(DllApp)
then
begin
Application := DllApp;
end;
end;
end;
exports
ShowMDIChild;
begin
DLLProc := @MyDLLProc;
end.

