Mega Code Archive

 
Categories / Delphi / System
 

How to put forms into a DLL

Title: How to put forms into a DLL? Question: How to put forms into a DLL? Answer: Create a new Project. Define the following procedure type TMyProc = procedure(App : TApplication; Scr : TScreen); stdcall; In the "private" area of "TForm1" add MyDLLHandle : THandle; ShowMyModuleForm : TMyProc; Add a "Form1.OnCreate" event and add this code to it: MyDLLHandle:=LoadLibrary('Project2.DLL'); if MyDLLHandle0 then @ShowMyModuleForm:=GetProcAddress(MyDLLHandle,'ShowMyForm') else ShowMyModuleForm:=nil; Add a "Form1.OnDestroy" event and add this code to it if Assigned(ShowMyModuleForm) then ShowMyModuleForm:=nil; if MyDLLHandle 0 then FreeLibrary(MyDLLHandle); MyDLLHandle:=0; Now drop a "TButton" onto the form and add an "OnClick" event with this code if (MyDLLHandle0) and (Assigned(ShowMyModuleForm)) then ShowMyModuleForm(Application,Screen); That's all for the EXE side. Create a new project (library project) {$R *.res} procedure ShowMyForm(App : TApplication; Scr : TScreen); stdcall; var a: TForm2; begin Application := App; Screen := Scr; a := TForm2.Create(Application.MainForm); {"Application.MainForm" could also be "nil" or any valid value} a.ShowModal; a.Free; end; exports ShowMyForm; end. Add to the "uses" clause "Forms". Add a new form unit to the project. In the "Implementation" area of the form put: var OldApp : TApplication; OldScr : TScreen; initialization OldApp := Application; OldScr := Screen; finalization Screen := OldScr; Application := OldApp; end. Put a "TButton" on the new form and set the "ModalResult" to "mrOk". Compile the "dll" and the "exe". There's a sample form in DLL. If you already have a form made that you want in the DLL just use it instead of "TForm2". Make sure the "initialization" and "finalization" code is in one, and only one, of the forms you put into the DLL. Without that code you may get unexpected results.