Mega Code Archive

 
Categories / Delphi / Forms
 

Dll içende mdi child form

PROGRAM MainProgram; INTERFACE uses Windows, etc...; IMPLEMENTATION type SimpleProc = procedure; stdcall; DLLInitProc = procedure( AppHandle : HWND; CallBackProc : SimpleProc ); stdcall; var HandleList : TList; DLLCallProc : SimpleProc; procedure LoadDLL( name : string ); var DLLHandle : THandle; DLLInit : DLLInitProc; begin if FileExists( name ) then begin DLLHandle := LoadLibrary( name ); if DLLHandle <> 0 then begin // loaded, so get the procedure we call to pass info to it @DLLInit := GetProcAddress( DLLHandle, 'ExportedDLLProc' ); if Assigned( DLLInit ) then begin // the DLL exported procedure is found, so lets call it DLLInit( Application.Handle, DLLCallProc ); // now we save this DLLs handle to later FREE it // when the program ends. HandleList.Add( DLLHandle ); end; end; end; end; procedure LoadAllDLLs; begin // without coding it, somehow you will have to // figure out how to find ALL the dlls path/filenames // possibly in a .CFG file, the Registry, etc. // loop, getting each path/filename string LoadDLL( DLLName ); // DLLName = path/filename end; procedure TForm1.SomeMenuItemClickToOpenDLLWindow; begin DLLCallProc; // call the passed back DLL proc end; INITIALIZATION HandleList := TList.Create; FINALIZATION HandleList.Free; END. -------------------------------------------------------------------------------- DLL CODE: -------------------------------------------------------------------------------- LIBRARY DLLUnit; INTERFACE USES DLLSource in 'DLLSource.pas'; EXPORTS DLLInit name 'DLLInit'; IMPLEMENTATION END. UNIT DLLSource; INTERFACE uses Windows, etc..; procedure DLLInit( AppHandle : HWND ); stdcall; export; IMPLEMENTATION USES DLLFormSource; var OldAppHandle : THandle; procedure HandleMenuClick; begin if Form1 = nil then DLLForm := TDLLForm.Create( Application.Handle ) else BringWindowToTop( Form1.Handle ); end; procedure DLLInit; begin // first we assign the passed in Application handle Application.Handle := AppHandle; // now we assign the passed in CallBackProc to the address // of the procedure we use to handle when the user clicks // on a menu item activating this MDI form. CallBackProc := @HandleMenuClick; end; INITIALIZATION OldAppHandle := Application.Handle; FINALIZATION Application.Handle := OldAppHandle END. DLL Form source: UNIT DLLFormSource; INTERFACE USES Windows, etc..; TDllForm = class( TForm ); procedure OnClose( TObject, Action, etc); procedure OnDestroy(); end; var DLLForm : TDLLForm; IMPLEMENTATION procedure TDLLForm.OnClose; begin action := caFree; end; procedure TDLLForm.OnDestroy; begin DLLForm := nil; end; END.