1. Home
  2. Computing & Technology
  3. Delphi Programming

No Main Form Delphi Application
How to Avoid Having a Main Form in a Delphi Application

By , About.com Guide

Avoid Having a Main Form in a Delphi Application

Avoid Having a Main Form in a Delphi Application

Every Delphi application must have a main form. The main form is the first form created in the body of the application. When the main form closes, the application terminates.

When a new project is created, the first form added to the project automatically becomes the value of the Application's MainForm property. To assign a different form to the MainForm property, use the Forms page of the Project|Options dialog box at design time.

Once the application is run, you cannot change the main form of the application.

No Main Form?

What if you need to create an application where every form is equally important (for example like IE) - where closing the main form will *not* close the application.

If from the first form created (or better to say: displayed to the user) you can create another form - you want the application to continue running even if the user closes the first form!

Hide the Main Form

One way to "remove" the main form from a Delphi application is to hide it when the application is started. Since every Delphi application MUST have a main form - your only option is not to show the main form when the application is executed.

This is rather simple, just go to the project's source code and add (after "Application.Initialize") a line like

Application.ShowMainForm := false;
Therefore, to hide the main form at startup, set ShowMainForm to false in the main project file before the call to the Run method. Make sure that the Visible property of the form is also false.

Now, when you do not have a main form, how do you know when to terminate the application? Since there's no main form - if all other forms are closed you application will still run - the main form is hidden and therefore the user cannot close it - and therefore exit from the application.

A Fake Main Form

Let's have a fake main form that host a button to create another instance of this fake main form.

Of course, when the main form is created we have to show this fake main form since the real main form will be hidden.

Here's how the project's source looks like if the real main form is named TMainForm.

//dpr source
begin
  Application.Initialize;
  Application.ShowMainForm := false;
  Application.CreateForm(TMainForm, MainForm) ;
  Application.Run;
end.
Since the real main form is hidden, you need to make sure the fake one gets displayed to the user when the application is run. Use the OnCreate event of the main form to create an instance of the main form.
In the code below, the fake form is named "TAppForm".
//OnCreate event of the real main form
procedure TMainForm.FormCreate(Sender: TObject) ;
begin
  with TAppForm.Create(Application) do
  begin
    Show;
  end;
end;
There's a button on the fake main form that will create another instance of this fake main form:
//"CreateButton" OnClick even handler
procedure TAppForm.CreateButtonClick(Sender: TObject) ;
begin
  with TAppForm.Create(Application) do
  begin
    Show;
  end;
end;
Only one more little thingy to take into account - close the application when the last fake main form is closed:
//fake main form OnClose
procedure TAppForm.FormClose(Sender: TObject; var Action: TCloseAction) ;
begin
  Action := caFree;
  //TRUE MAIN and this fake instance
  if Screen.FormCount = 2 then
  begin
    Application.Terminate;
  end;
end;
The FormCount property of the Screen object can be used with Forms to iterate over all the forms in an application.

If the number of active forms is 2, and the fake main form is about to close - close the entire application using Application.Terminate. The other running form - is the real main form itself :)

That's it. Download the source code and try for yourself.

Delphi tips navigator:
» Use Custom Check Box Images for a ListView - Delphi 's TListView Checkboxes are Ugly
« Append Formatted Lines to Rich Edit using Delphi's SelText and SelStart

More Delphi Programming Quick Tips
Explore Delphi Programming
About.com Special Features

Holiday Central

What to eat, where to go, fun things to do and how to save money on the perfect gifts. More >

Family Tech Center

Stay connected and entertained with reviews on tips on the latest HDTVs, cellphones and more. More >

  1. Home
  2. Computing & Technology
  3. Delphi Programming
  4. Coding Delphi Applications
  5. Delphi Tips and Tricks
  6. Delphi 2008 Tips
  7. No Main Form Delphi Application

©2009 About.com, a part of The New York Times Company.

All rights reserved.