Home > General > How To and Why Use Dynamically Created Forms

How To and Why Use Dynamically Created Forms

December 15th, 1999 Leave a comment Go to comments

You almost never need all your application’s forms in memory all the time. To reduce the amount of memory required at load time and load time, you may want to create some forms only when you need to use them. For example, a dialog box needs to be in memory only during the time a user interacts with it.

Well, to do so you first have to create a form (or take an existing one), move it from the Project|Options auto-create list to the available forms list. You can do this manually too. Select Project|View source or View|Project source and remove the code creating the form. If your form is named Form1 then remove the following line from the projects source:

Application.CreateForm(TForm1, Form1);

Here’s the code that creates the form and after closing it, destroys it:

{ Use this for modal forms }
with TForm1.Create(Self) do
try
  ShowModal;
finally
  Free;
end;
...
{ Use this for non-modal forms }
var
  Form1: TFrom1;
...
begin
  Form1 := TForm1.Create(Self);
  Form1.Show;
end;

With non-modal forms you have to add this code to the form’s OnClose event:

...
Action := caFree;
...

This will free the memory allocated by the form when it is closed.

  1. njue Humphrey
    October 30th, 2008 at 01:03 | #1

    Hi, the tip you have given above about creating the delphi forms at runtime has helped me alot. But I have one problem whereby when I create a form at runtime and is brought to focus once it acts fine but a problems comes when I hide it with another therefore loosing focus. It does not repaint again on top of the other also dynamically created form. Both are painted on the parent form, meaning that they are modal.
    How should I do? Help please

  2. September 14th, 2009 at 06:26 | #2

    try calling Invalidate when the OnActivate event occures