Estoy utilizando Delphi 2010 para construir una aplicación Win32 GUI se ejecuta en Windows XP/Vista y Windows 7.Interruptor Application.Mainform en tiempo de ejecución e invocar MainformOnTaskBar causa parpadeo en la barra de tareas de Windows
Básicamente, el Application.MainForm es una propiedad de sólo lectura y no se pueden cambiar en tiempo de ejecución una vez que se crea la primera forma a través de Application.CreateForm:
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
el ejemplo anterior hará que Form1 como MainForm de aplicación. Aparecerá en la vista previa en miniatura de la barra de tareas de Windows 7.
Configurando Application.MainFormOnTaskBar en true en tiempo de ejecución nos permite disfrutar de las características del tema aerodinámico de Windows.
Necesito cambiar la forma principal de la aplicación en tiempo de ejecución. Por ejemplo, configure Form2 como formulario principal. Yo uso siguiente código para que funcione:
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;
Ejecutar Button1.Click hará Form2 como MainForm y actualizar vista previa en miniatura barra de tareas de Windows'. Sin embargo, la barra de tareas puede parpadear en el cambio.
Mis preguntas son:
- ¿Hay alguna manera a distancia, tales parpadeo?
- ¿Es seguro establecer Application.MainformOnTaskBar: = False y establecerlo en True de nuevo en tiempo de ejecución?
Además también se puede crear dos procesos diferentes e intercambiar datos entre ellos. Eso es, por supuesto, un poco más caro y puede no ser ideal si tiene que compartir datos. –
Eso sería lo contrario de impedir el parpadeo de la barra de tareas, @Jens. La barra de tareas agrupa los botones del mismo proceso, por lo que el código de Chau parece reemplazar un botón por otro: ocupan el mismo lugar en la barra de tareas. Pero si los botones pertenecen a dos procesos diferentes, entonces la barra de tareas no los mantendrá unidos. No solo tendrá botones parpadeantes, sino botones que saltan de un lugar a otro. –
Depende si deben ser visibles al mismo tiempo y si son lo suficientemente separados para dos ejecutables diferentes. La pregunta es por qué Chau necesita cambiar la forma principal de todos modos. Especulaba que podría ser una mejor idea usar dos procesos del mismo ejecutable o incluso dos diferentes. –