Napravio sam i dobro funkcionira. Predao sam izmjene programa stranic i (bar za sada) se nisu javili da nešto ne štima.
U XE Dll-u ima export procedure:
Code:
procedure SynApp(App: THandle; Parent: HWND); stdcall;
begin
Application.Handle := App;
if not Assigned(Form1) then begin
Form1 := TForm1.CreateParented(Parent);
end;
Form1.Show;
end;
procedure Disconnect; stdcall;
begin
Form1.Close;
FreeAndNil(Form1);
end;
"Parent" je ttabsheet na kom se prikazuje forma "Form1" koja je maximizirana. Bodući da je main program uvijek maximiziran nemam problema s maksimiziranjem Form1. Problem je ako main program nije maximizira je se kanije Form1 ne može maksimizirati (nema border niti gumbe za max.)
U Form1.OnClose radim free objekata, data modula i svega ostaloga...
U Main programu pozivam proceduru:
deklarirane public varijable:
Code:
var
MySqlDisconect: tMyDisconect;
MySqlSynApp: tSynApp;
MySqlHandle: THandle;
Procedura:
Code:
...
Screen.Cursor := crHourGlass;
try
if MySqlHandle = 0 then MySqlHandle := loadLibrary('MySQLConnection.dll');
if MySqlHandle <> 0 then begin
@MySqlSynApp := GetProcAddress(MySqlHandle, 'SynApp');
@MySqlDisconect := GetProcAddress(MySqlHandle, 'Disconnect');
MySqlSynApp(MainFrm.Handle, tsWeb2.Handle);
end else
showMessage ( 'DLL MySQLConnection nije pronađen...' );
except
end;
Screen.Cursor := crDefault;
I konačno, da ne bi program javljao errore kod Form.Close
Code:
TMainFrm.FormClose(Sender: TObject; var Action: TCloseAction);
...
if MainPageControl.ActivePage = tsWeb2 then MySqlDisconect;
if MySqlHandle <> 0 then FreeLibrary(MySqlHandle);