Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por lafirma
Que metodo deberia sobrescribir para que los forms sean creados maximizados de forma automatica?
Creo que te bastaría redefinir el constructor Create.

// Saludos
Responder Con Cita
  #2  
Antiguo 08-06-2004
lafirma lafirma is offline
Miembro
 
Registrado: may 2003
Ubicación: Honduras
Posts: 159
Poder: 22
lafirma Va por buen camino
Roman, agaradezco tu atencion a mi problema
He intentado ya lo que mencionas y siempre se presenta el mismo problema:
El codigo siguiente funciona (Maximiza el form) pero siempre se presenta el problema del efecto, supongo que este codigo es como establecer la propiedad inmediatamente despues de la llamada a Create cuando creo el form en tiempo de ejecucion..
Código Delphi [-]
constructor TBaseForm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  WindowState := wsMaximized;
end;

este codigo no funciona para nada... no se maximiza, supongo que la llamada a inherited sobreescribe el valor de la propiedad WindowState.
Código Delphi [-]
constructor TBaseForm.Create(AOwner: TComponent);
begin
  WindowState := wsMaximized;
  inherited Create(AOwner);
end;

Mas bien quisiera poder establecer desde delphi que la ventana se cree maximizada desde la llamada que se hace al API de Windows cuando se crea el objeto del form.
__________________
Saludos

Douglas Cruz
Responder Con Cita
  #3  
Antiguo 08-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Dime, ¿en que Windows lo pruebas? Es que es un poco difícil verificarlo porque en WinXP no se muestra el efecto que mencionas. Miraré a ver si puedo probarlo en Windows 98.

// Saludos
Responder Con Cita
  #4  
Antiguo 08-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Vamos a ver.

El efecto que mencionas supongo que es el de la animación que normalmente tienen las ventanas al maximizarse. No lo había notado porque sólo probé con el primer formulario hijo que se crea de inicio. Pero al hacer la prueba con formularios creados durante la ejecución vi que en efecto se nota como la ventana se va maximizando.

Ya en el hilo que mencionas, Magician comentaba que este efecto se puede deshabilitar. Quizá lo que no te gustó de esa solución es que sólo menciona como hacerlo cambiando las propiedades en el panel de control.

Sin embargo puedes hacer lo mismo por código con el siguiente procedimiento:

Código Delphi [-]
(*
  Enable = false inhabilita la animación
  Enable = true habilita la animación
*)
procedure EnableAnimation(Enable: Boolean);
var
  Info: TAnimationInfo;

begin
  Info.cbSize := SizeOf(TAnimationInfo);
  LongBool(Info.iMinAnimate) := Enable;
  SystemParametersInfo(SPI_SETANIMATION, SizeOf(Info), @Info, 0);
end;

Usando este procedimiento justo antes de crear una nueva ventana hija se mejora bastante y prácticamente desaparece el efecto. Sin embargo aún se alcanza a notar como la ventana pasa de su tamaño normal al maximizado. El parpadeo es muy rápido y muchas veces no se nota pero aún deja la sensación de que algo "no anda bien".

No obstante puedes hacer uso de otro truco más- LockWindowUpdate, con lo que, hasta donde he visto, desaparece totalmente el efecto. LockWindowUpdate sirve para deshabilitar el dibujado de una ventana de manera que la ventana hija no se vea sino hasta que esté completamente maximizada.

De hecho, LockWindowUpdate fue lo primero que intenté pero aunque ciertamente no se ve el efecto de la maximización, lo que sucede es que la ventana tarda unos cuántos microsegundos en aparecer, justamente por el tiempo que se lleva la animación.

Pero combinando ambas técnicas me parece que se logra lo que deseas.

Para centralizar el proceso podrías crearte un método en el formulario padre que se encargue de crear las ventanas hijas:

Código Delphi [-]
type
  TVentanaPadre = class(TForm)
  public
    procedure CreaHija(ClaseHija: TFormClass);
  end;

implementation

procedure TVentanaPadre.CreaHija(ClaseHija: TFormClass);
begin
  LockWindowUpdate(Handle);
  EnableAnimation(false);

  try
    ClaseHija.Create(Self);
  finally
    EnableAnimation(true);
    LockWindowUpdate(0);
  end;
end;

end.

En el parámetro ClaseHija pasarías la clase de la ventana mdi hija de manera que el mismo procedimiento te sirve si manejas varias clases de ventanas hijas.

// Saludos
Responder Con Cita
  #5  
Antiguo 08-06-2004
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Talking Fantástico

Waoooo, quiero darte las gracias Román, yo fui quien abrió aquel hilo y te confieso que aunque quedé muy agradecido por el esfuerzo de todos los amigos del club mi aplicación no funcionó como yo quería hasta hoy que puse en práctica los trucos que das en este hilo. Gracias nuevamente.

Por cierto de donde lo sacarías

un saludo desde Cuba
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #6  
Antiguo 08-06-2004
lafirma lafirma is offline
Miembro
 
Registrado: may 2003
Ubicación: Honduras
Posts: 159
Poder: 22
lafirma Va por buen camino
Roman, he observado tus ejemplos y funcionan a la perfeccion... agradezco tu evidente esfuerzo por encontrar una solucion...

Sin embargo debo mencionar que aun tengo contratiempos, pues el hecho de que el form sea maximizado ó no, se obtiene de un archivo Ini cada vez que se abren los forms, y se guarda cada vez que se cierran, por lo que los trucos mencionados no me funcionan tal cual estan, esoy intentando adaptarlos a lo que necesito, indicare mas adelante como resulto todo.
__________________
Saludos

Douglas Cruz
Responder Con Cita
  #7  
Antiguo 08-06-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
¿De que componente se trata?... si es alguno de los de las RxLibs, puedes suprimir este comportamiento simplemente quitando fpState de la propiedad Options.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 08-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por lafirma
por lo que los trucos mencionados no me funcionan tal cual estan, esoy intentando adaptarlos a lo que necesito, indicare mas adelante como resulto todo.
En casa tengo algún código que se encargaba de estos detalles sin importar en qué momento se maximizaba el formulario. No puedo verificarlo ahora pero pienso que puedes intentar capturar el mensaje WM_SIZE para el formulario hijo, inhabilitando la animación antes de llamar a inherited y rehabilitandola después:

Código Delphi [-]
procedure TVentanaHija.WMSize(var Msg: TWMSize);
begin
  if Msg.SizeType = SIZE_MAXIMIZED then
  begin
    EnableAnimation(false);
    LockWindowUpdate(Handle);

    inherited;

    LockWindowUpdate(0);
    EnableAnimation(true);
  end
  else
    inherited;
end;

Si esto te funciona entonces bastaría que manejes este mensaje en el formulario base de manera que todos los hijos descendientes hereden el comportamiento.

Claro, que si no te interesa recuperar la maximización al momento de reabrir la aplicación entonces bastará hacer lo que te indica Federico.

Edición - Corrección

En la llamada a LockWindowUpdate de arriba tendrías que poner el 'handle' de la ventana padre, no el del mismo formulario hijo como puse.

// Saludos

Última edición por roman fecha: 08-06-2004 a las 18:47:09. Razón: Correción de concepto
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:26:19.


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
Copyright 1996-2007 Club Delphi