I am using Delphi 2010 to build a Win32 GUI application running on Windows XP/Vista and Windows 7.
Basically, the Application.MainForm is a read only property and can't be changed at runtime once the first form is created via Application.CreateForm:
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
The above example will make Form1 as application's mainform. It will show on Windows 7 taskbar's thumbnail preview.
Setting Application.MainFormOnTaskBar to true at runtime allow us to enjoy Windows aero theme features.
I need to switch the application's mainform at runtime. For example, set Form2 as main form. I use following code to make it work:
procedure SetAsMainForm(aForm:TForm);
var
P:Pointer;
begin
Application.MainFormOnTaskBar := False;
try
P := @Application.Mainform;
Pointer(P^) := aForm;
aForm.Show;
finally
Application.MainFormOnTaskBar := True;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetAsMainForm(Form2);
end;
Execute Button1.Click will make Form2 as mainform and update the Windows' taskbar thumbnail preview. However, the Taskbar may flicker on the switching.
My questions are:
- Is there any way to away such flickering?
- Is it safe to set Application.MainformOnTaskBar := False and set it to True again in runtime?