PDA

Ver la Versión Completa : minimizar en XP con Delphi 6


emeceuy
30-10-2008, 12:21:18
Hola estimados ! bueno, he buscado pero no he encontrado situación similar, y aunque es una bobada de facil, no se si tiene solución...

Utilizando delphi 6 y windows xp, corriendo una aplicación (o sea que está en la barra de tareas), al presionar el botón de minimizar de la barra de arriba de la aplicación, el programa se minimiza, pero no se queda solamente en la barra de tareas, sino que queda una barrita chiquita arriba de la barra de tareas con los botones de restaurar y cerrar. En cambio, si se presiona la aplicación en la barra de tareas o si se presiona win+D la aplicación se minimiza normalmente (o sea, queda solamente en la barra de tareas).

Espero haber sido claro jeje... muchas gracias desde ya !!! salu2

Neftali [Germán.Estévez]
30-10-2008, 14:25:19
Pues estoy probando con Delphi5 y XP y funciona perfectamente.
Incluso si coloco un botón que ponga:

Application.Minimize;

También funciona OK.
¿Estás haciendo algo raro para visualizar los formularios?
¿Algun código en el OnShow, DoShow,...?

Lepe
30-10-2008, 14:28:12
No estoy seguro, pero intentando ayudar...

Quizás sin darte cuenta estás usando bibliotecas para aplicaciones CLX, verifica que no estás usando por ejemplo las unidades: QDialogs, QControls, etc, deberías estar usando Dialogs, Controls, que éstas si son la VCL.

Saludos

Delphius
30-10-2008, 14:44:53
Lo que sucede es que la ventana que ha minimizado es una ventana secundaria, no la principal. Por ello cuando minimiza la aplicación (estando minimizada esta ventana secundaria), se ve al costado inferior izquierdo una "barra" con los botones minimizar y maximizar.

Es el comportamiento esperado y por defecto que se ve en aplicaciones SDI (al menos que yo sepa).

Saludos,

emeceuy
30-10-2008, 15:02:02
Muchas gracias a todos por las respuestas ! Efectivamente es como dice Delphius, muchas gracias, pero no se como solucionarlo !
Les comento, uso una especie de splash screen, y el source del programa es como sigue:


vInicio:=now;

Application.Initialize;
Application.Title := 'Marcelo';
Application.CreateForm(TfrmInicioSplsh, frmInicioSplsh);

frmInicioSplsh.Show;
frmInicioSplsh.update;

Application.CreateForm(Tdbq, dbq); //debe estar antes del principal porque éste lo usa en su evento oncreate
Application.CreateForm(TfrmPrincipal, frmPrincipal);

repeat Application.ProcessMessages;
until ((millisecondsbetween(now,vInicio)>2000) or (vCerrar));
end;

frmInicioSplsh.free;
frmPrincipal.Showmodal;

Application.Run;

Creo que el tema está que cuando cierra la ventana de splash, activo al form principal con showmodal, y ahi queda como secundaria, entonces al minimizar queda a abajo a un lado, y no en la barra de tareas solamente.

El tema es que intenté cpm frmPrincipal.show pero la aplicación se cierra, y la verdad no se como hacer ! alguien sabe? muchisimas gracias como siempre por todas sus respuestas !

Delphius
30-10-2008, 15:40:34
emeceuy, ¿que es dbq?:confused:

¡Por otro lado, porqué el ShowModal de la principal! Con CreateForm, lo que hace es que si se trata del Main Form, lo visualice, en otro caso lo va a crear.
Si efectivamente frmPrincipal es el Main Form no deberías tener problemas.

Saludos,

emeceuy
30-10-2008, 15:58:07
Gracias por la respuesta Delphius. dbq es un modulo de datos en donde hay querys para el acceso a tablas, y al iniciar el frmPrincipal debe sacar datos de ellas, por eso debe estar creado antes.

Yo quiero que mi form principal sea frmPrincipal, pero debería primero mostrar la ventana de splash screen e inclusive crear el modulo de datos dbq. O sea, si pongo a frmPrincipal en primer lugar en el source donde se crean los forms, intentará acceder a los querys de dbq y da access violation. Además no mostraría el splash creen. Es por eso que creo a frmPrincipal al final y luego lo muestro. Pero como puedo solucionar esto???

Delphius
30-10-2008, 16:18:21
Bueno el modulo de datos debe ir primero.
Necesariamente (es un requisito) que el primer Form a crear sea el principal. Asi trabaja Delphi.

Prueba algo como esto:

Application.Initialize;

inicio := now;


Application.CreateForm(TForm1, Form1);

Application.CreateForm(TForm3, Form3);
form3.Show;
form3.Update;

repeat
Application.ProcessMessages;
until (millisecondsbetween(now, inicio)>2000);

Application.CreateForm(TForm2, Form2);

form3.Free;

Application.Run;

Donde Form3, es el que hace de splash, form1 es el main Form y form2 es otro cualquiera.

De ese modo conseguirás mostrar form3 como splash, form1 será el Main Form.

Obviamente, antes del Form prinicipal deberá estar tu módulo de datos.

El tema de porqué cuando minimizas cualquier form que no sea principal se vaya allí es como dije: es el comportamiento esperado. Si no quieres que haga eso, prueba desabilitando la opción de minimizar.
O la otra opción que se me ocurre es que tu aplicación sea MDI.

Saludos,

emeceuy
30-10-2008, 17:23:15
Efectivamente esa fue la solución Delphius, muchas gracias ! Eso si, tuve que poner en la propiedad "visible" del form principal a false, pues sino se abría el form principal, luego la splash y luego se cerraba la splash... poniendo visible en false se soluciona !

gracias ! salu2 :D