How To and Why Use Dynamically Created Forms

Posted on December 15th, 1999 in General | 2 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.

How to Get a Unique File Name

Posted on December 15th, 1999 in General | 1 Comment »

You want to save data to a temporary file but you don’t what to file name to use? Well, this function does all the work for you.

function CreateUniqueFileName(sPath: string): string;
var
  chTemp: Char;
begin
  repeat
    Randomize;
    repeat
      chTemp := Chr(Random(43) + 47);
      if Length(Result) = 8 then
        Result := Result + '.'
      else if chTemp in ['0'..'9', 'A'..'Z'] then
        Result := Result + chTemp;
    until Length(Result) = 12;
  until not FileExists(sPath + Result);
end;