Hide the Main Form in a Delphi 2009 Application

13,694

Solution 1

Turns out the reason we were seeing the Application window on the taskbar was a simple setting similar to stukelly's answer but not quite.

To get the main form to appear on the task bar and hide the application menu you apply:

Application.MainFormOnTaskbar := True;
Application.ShowMainForm := False;

No code behind the form create or anything required.

Solution 2

You need to set the ShowMainForm and MainFormOnTaskBar properties to False before the form is created.

Open your project source and set MainFormOnTaskBar and ShowMainForm to False, before the form is created.

Application.Initialize;
Application.MainFormOnTaskbar := false;
Application.ShowMainForm := false;
Application.CreateForm(TForm1, Form1);

Then on your main form add the following code to the FormActivate and FormShow events.

procedure TForm1.FormActivate(Sender: TObject);
begin
 // hide taskbar button
 ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
 // hide taskbar button
 ShowWindow(Application.Handle, SW_HIDE);
end;

I have tested with Dephi 2007 and 2009. Additional information is available here.

Share:
13,694
James
Author by

James

Updated on June 07, 2022

Comments

  • James
    James almost 2 years

    The following code works fine in Delphi 7. However, in Delphi 2009 the form does remain hidden but the button on the taskbar is now appearing.

    ShowWindow(Handle, SW_HIDE);
    SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW );
    ShowWindow(Handle, SW_SHOW);
    

    The above code is called in the FormCreate method.

  • weh
    weh about 15 years
    Thanks for posting your solution back on stack overflow. I thought you wanted to hide the taskbar button and the main form.
  • TheSteven
    TheSteven over 11 years
    This doesn't work if you have code in FormActivate(). The form never shows so the FormActivate() never gets called.
  • James
    James over 11 years
    @TheSteven that makes complete sense, the form should never become active...it's hidden. If you have code in FormActivate for a hidden form then it's obviously the wrong place for it.