Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error al minimizar (https://www.clubdelphi.com/foros/showthread.php?t=86700)

gdlrinfo 18-09-2014 21:30:21

Error al minimizar
 
Hola amigos tengo un problema al minimizar mi programa desde el form este queda sobre la barra de tareas y no en la barra en si mando un enlace con la foto a ver si alguien puede darse cuenta cual es el problema https://www.dropbox.com/s/npcl112u8d...Dtulo.jpg?dl=0
Desde ya Muchas Gracias como siempre saludossss.....


Casimiro Notevi 18-09-2014 22:04:56

1 Archivos Adjunto(s)
Probando a sacar la imagen.

radenf 18-09-2014 22:31:05

Hola gdlrinfo.

En el ProjectManager debes hacer click derecho sobre el nombre del ejecutable y seleccionar ViewSource.
Debes asegurarte que en el siguiente código, lo resaltado se encuentre en True y debiera funcionar.

Código Delphi [-]
 Application.Initialize;
 Application.MainFormOnTaskbar :=True;
 Application.CreateForm(TFormPrincipal, FormPrincipal);
 Application.Run;

Salu2

gdlrinfo 19-09-2014 22:26:53

Hola
 
Amigo muchas gracias por tu respuesta asi es esta en "TRUE" pero no funciona :C desconozco el motivo la verdad nose porque lo hace gracias por tu ayuda

gdlrinfo 19-09-2014 23:44:11

Posible solucion
 
Hola nuevamente creo que encontré porque sucede eso a ver que les parece :
Resulta que el form principal de mi soft es un form que pide usuario y pass el principal no es ese que no tiene ningún botón sino el form3 aquí muestro

Código Delphi [-]
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := true; //esta en true
  TStyleManager.TrySetStyle('Silver');
  Application.CreateForm(TForm3, Form3);//// pero este el principal 
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm4, Form4);

ahora si pongo que me genere primero el form3 adivinen anda de 10 como podre solucionar esto ? gracias como siempre!!!!!

radenf 20-09-2014 00:56:04

Estimado gdlrinfo:

Yo no puedo adivinar qué contiene o qué hace cada uno de tus Forms.
¿Los formularios los creas a medida que los necesitas o ya los has creado al iniciar el programa?
Con tu proyecto cargado revisa en el menú principal de Delphi >Project>Options>Forms = Main form. Este es el que se abre primero.
Si inicias el programa con el Form de Login, donde se pide usuario y pass, este debiera ser el Main Form y desde él abrir el Form que tu quieras.

Salu2

gdlrinfo 22-09-2014 20:01:07

Buenas
 
hola radenf en te comento que si pongo como form1 principal el cual es el principal y no el 3 como esta ahora es que me auto crea primero el principal y yo necesito que me cree primero el form3 que tiene la clave... ahora bien si yo creo primero el principal si me anda lo de minimizar, ahora si creo primero el form3 del usuario ya no lo hace..
Esto de crear primero el form3 no es un capricho sino es que necesito que sea el primero que se crea ya que tiene que aprobar los usuarios antes de darle la entrada un abrazo y gracias por tu respuesta !!



Aclaro que en el anterior estaba mal expresado
Código Delphi [-]
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := true; //esta en true
  TStyleManager.TrySetStyle('Silver');
  Application.CreateForm(TForm3, Form3);//// pero este no es el principal sino el de usuario.
  Application.CreateForm(TForm1, Form1);//// este es el form principal.
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm4, Form4);

radenf 22-09-2014 22:14:50

Prueba colocar en el evento onCreate del form que aparece minimizado lo siguiente:

Código Delphi [-]
WindowState.wsMaximized;

Saludos

nlsgarcia 22-09-2014 22:17:12

gdlrinfo,

Cita:

Empezado por gdlrinfo
...tengo un problema al minimizar mi programa desde el Form3 este queda sobre la barra de tareas y no en la barra...el Form3 de mi software es un formulario que pide usuario y password, el Form1 (Principal) no es ese que no tiene ningún botón sino el Form3...

:rolleyes:

Revisa este código:
Código Delphi [-]
program Project1;

uses
  Windows,
  Controls,
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

var
   Form1 : TForm1;

{$R *.res}

begin

   Application.Initialize;
   Application.MainFormOnTaskBar := True;
   Application.Title := 'Test Application';

   Form1 := TForm1.Create(Application); // Form1 No AutoCreate

   SetWindowLong(Form1.Handle,GWL_EXSTYLE,(GetWindowLong(Form1.Handle,GWL_EXSTYLE) or WS_EX_APPWINDOW));

   if Form1.ShowModal = mrOK then
      Application.CreateForm(TForm2, Form2) // Form2 AutoCreate MainForm
   else
      Application.Terminate;

   Application.Run;

end.
El código anterior en Delphi 2010 sobre Windows 7 Professional x32, permite crear un formulario Form1 de Login en modo ShowModal, el cual tendrá su icono sobre el ToolBar de Windows de forma Standard al igual que el formulario principal Form2, la configuración de creación de los formularios en el proyecto se muestra en la siguiente imagen:



Espero sea útil :)

Nelson.

gdlrinfo 22-09-2014 22:35:45

Buenas
 
Hola agradezco a todos por las respues y probe tu ayuda nlsgarcia pero me hacia lo mismo lo que hice fue algo parecido a lo que me dices pero en vez de que cree los form al iniciar lo hago cuando los voy a usar por ejemplo asi :

Código Delphi [-]
Application.CreateForm(TForm2, Form2);
Form2.Show;
De esta manera no me crea los form al abrirlo sino cuando los uso y puse el 3 como principal y ahora si se minimiza perfecto agradezco la ayuda de todos como siempre y les mando un abrazo !

nlsgarcia 22-09-2014 22:53:22

gdlrinfo,

Cita:

Empezado por gdlrinfo
...lo que hice fue algo parecido a lo que me dices...ahora si se minimiza perfecto...

^\||/

Cita:

Empezado por gdlrinfo
...probé tu ayuda nlsgarcia pero me hacia lo mismo...

:confused:

Te comento:

1- El código propuesto en el Msg #9, funciona correctamente según lo esperado en las pruebas realizadas con Delphi 2010 sobre Windows 7 Professional x32.

2- La clave del código propuesto es la función SetWindowLong

Espero sea útil :)

Nelson.

roman 23-09-2014 17:31:16

Cita:

Empezado por nlsgarcia (Mensaje 481898)

:confused:

Puede ser que me equivoque, pero me parece que el problema que gdlrinfo tenía es que al minimizar el formulario "principal" se quedaba arriba de la barra de tareas, cosa que sucede con cualquier formulario secundario. Y sucedía porque tal formulario "principal" realmente no lo era. Para la VCL el formulario principal es el primero que se crea con Application.CreateForm.

Por eso, en tu código, la clave realmente no está en el SetWindowLong, sino en en crear el formulario del Login con TForm1.Create en lugar de Application.CreateForm.

// Saludos

nlsgarcia 23-09-2014 17:48:56

roman,

Cita:

Empezado por roman
...la clave realmente no está en el SetWindowLong, sino en crear el formulario del Login con TForm1.Create en lugar de Application.CreateForm...

:rolleyes:

Es una combinación de ambas, pero sin la función SetWindowLong utilizada en el Msg #9, el formulario Form1 en modo ShowModal se muestra encima del ToolBar, no dentro del ToolBar, lo cual es el caso mencionado en el Msg #1.

En lo personal, no veo ningún problema al comportamiento descrito en el Msg #1, sin embargo cada entorno de trabajo tiene su propia idiosincrasia :cool:

Saludos,

Nelson.

roman 23-09-2014 17:56:50

Cita:

Empezado por nlsgarcia (Mensaje 481935)
el formulario Form1 en modo ShowModal se muestra encima del ToolBar, no dentro del ToolBar[/i][/b][/color], lo cual es el caso mencionado en el Msg #1.

Bueno, del mensaje 1 poco se puede colegir. Mi impresión es que no le preocupa que el formulario del login se minimice arriba de la barra de tareas (de hecho, un formulario de login no debería minimizarse de ninguna manera ya que es un cuadro modal) sino que el formulario principal de la aplicación lo haga.

Pero, como dije, puede ser que me equivoque.

// Saludos

nlsgarcia 23-09-2014 18:19:43

roman,

Cita:

Empezado por roman
...del mensaje 1 poco se puede colegir. Mi impresión es que no le preocupa que el formulario del login se minimice arriba de la barra de tareas...sino que el formulario principal de la aplicación lo haga...

:rolleyes:

Ciertamente la redacción de los mensajes no es muy explicita, pero el código del Msg #9 muestra como hacer que todos los formularios del ejemplo queden al ser minimizados dentro del ToolBar, no encima del Toolbar, lo cual se adapta al problema planteado :)

Saludos,

Nelson.

gdlrinfo 30-09-2014 00:09:12

Hola Roman
 
Cita:

Empezado por roman (Mensaje 481936)
Bueno, del mensaje 1 poco se puede colegir. Mi impresión es que no le preocupa que el formulario del login se minimice arriba de la barra de tareas (de hecho, un formulario de login no debería minimizarse de ninguna manera ya que es un cuadro modal) sino que el formulario principal de la aplicación lo haga.

Pero, como dije, puede ser que me equivoque.

// Saludos

Hola Román tal como lo dices el form de usuario solo tiene X para cerrar no hay minimizar pero mi problema era que el form principal no lo tomaba como tal, entonces lo abría como una ventana secundaria lo solucione creando primero el form principal y ocultándolo luego creo el de usuario y cuando lo ponen le da el visible=true al principal y hace un destroy del de usuario, el problema es que me creaba el form al inicio es decir todos automáticamente ahora le puse que no cree ninguno solo el principal y el de usuario y si necesito alguno lo creo antes de abrirlo y listo :D gracias a todos como siempre por darme una mano !!!

roman 30-09-2014 17:46:31

Cita:

Empezado por gdlrinfo (Mensaje 482321)
Hola Román tal como lo dices el form de usuario solo tiene X para cerrar no hay minimizar pero mi problema era que el form principal no lo tomaba como tal, entonces lo abría como una ventana secundaria lo solucione creando primero el form principal y ocultándolo luego creo el de usuario y cuando lo ponen le da el visible=true al principal y hace un destroy del de usuario, el problema es que me creaba el form al inicio es decir todos automáticamente ahora le puse que no cree ninguno solo el principal y el de usuario y si necesito alguno lo creo antes de abrirlo y listo :D gracias a todos como siempre por darme una mano !!!

Gracias. Confirmas lo que había pensado y qué bueno que lo has podido solucionar, aunque he de decirte que me gusta más la solución que planteó nlsgarcia (sin el SetWindowLong ni el Application.Terminate) porque, al menos a mi, me pasaba que haciéndolo como tú, en ocasiones se notaba el pestañeo entre que se visualiza el formulario pricipal y se esconde.

De todas maneras, lo importante es que ya te funcione.

// Saludos

AgustinOrtu 13-10-2014 19:30:25

Impresionante, y pensar que yo lo solucione interceptando los eventos onMinimize y onRestore, muchas gracias nelson


La franja horaria es GMT +2. Ahora son las 16:05:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi