Переключить приложение. Mainform во время выполнения и вызов MainformOnTaskBar вызывают мерцание на панели задач Windows

Я использую Delphi 2010 для создания приложения Win32 GUI, работающего в Windows XP / Vista и Windows 7.

По сути, Application.MainForm является свойством только для чтения и может ' t можно изменить во время выполнения, как только первая форма будет создана через Application.CreateForm:

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.

В приведенном выше примере Form1 будет главной формой приложения. Он будет отображаться в миниатюре панели задач Windows 7.

Установка Application.MainFormOnTaskBar на true во время выполнения позволяет нам пользоваться функциями темы Windows aero.

Мне нужно переключить приложение ' основная форма во время выполнения. Например, установите Form2 как главную форму. Я использую следующий код, чтобы заставить его работать:

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 сделает Form2 главной формой и обновит предварительный просмотр эскизов панели задач Windows. Однако панель задач может мерцать при переключении.

Мои вопросы:

  1. Есть ли способ избавиться от такого мерцания?
  2. Безопасно ли установить Application.MainformOnTaskBar: = False и снова установить значение True в время выполнения?
6
задан Chau Chee Yang 9 November 2010 в 08:32
поделиться