Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Animación/Efecto Forms MDIChild (https://www.clubdelphi.com/foros/showthread.php?t=46331)

MaMu 28-07-2007 23:36:17

Animación/Efecto Forms MDIChild
 
Animación/Efecto Forms MDIChild.

Existe alguna funcion o posibilidad de animar la creacion y destruccion de un MDIChild??? al estilo AnimateWindow. (esta no me fuciona con los MDIChild).

Saludos

Caral 29-07-2007 03:29:24

Hola
No se si esto sirva o si se podra usar en un MDIChild:
Código Delphi [-]
var
retardo: integer;
begin
  retardo:= 10000;//retardo en milisegundos
  Form2.BringToFront;
  AnimateWindow(Form2.Handle,Retardo, AW_HOR_POSITIVE + AW_VER_POSITIVE );
  Form2.Show;
De donde saque esto dice:
Cita:

Los parámetros son:
- El handle al form que queremos animar.
- El retardo, que es el tiempo que queremos que dure la animación.
- Y el tipo de animación podemos elegir entre estas:
AW_HOR_NEGATIVE
AW_VER_POSITIVE
AW_VER_NEGATIVE
AW_BLEND
AW_CENTER
AW_HOR_POSITIVE, pueden hacerse además combinaciones: AW_HOR_POSITIVE + AW_VER_POSITIVE
Saludos

MaMu 29-07-2007 23:38:16

No me funciona, me tira error ("Access violation at address .....")

:(

Saludos

ArdiIIa 30-07-2007 01:31:03

No sabía que existiera esa función....
Pero en Delphi3000 he encontrado esto:

Cita:

AnimateWindow is a API which can enhance your GUI by adding special animations to your forms. However, the API is not valid in all operating systems. It is only valid in Windows 98 / 2000 and >

This code shows you how to use AnimateWindow when (and only when) it is supported. Without crashing and burning when it is not supported.
Donde está declarada esa función ??

ArdiIIa 30-07-2007 01:40:08

Vale, ya la he pillado...

En un form normal, si funciona... en un MDI no lo he probado..

ArdiIIa 30-07-2007 01:48:22

Y ahora si, la he probado en MDI y funciona perfectamente.

Código Delphi [-]
procedure TForm2.FormCreate(Sender: TObject);
begin
  BringToFront;
  AnimateWindow(Handle,500,  AW_VER_POSITIVE);
end;

Caral 30-07-2007 02:03:34

Hola
Se ve la diferencia cuando un Maestro interviene :) , me alegro que lo resolvieras ArdiIIa, me parecia que se podia pero no estaba seguro, nunca he trabajado con MDI, Gracias.
Saludos

MaMu 30-07-2007 03:06:34

Gracias a ambos.

Saludos

MaMu 30-07-2007 03:18:51

Pero igual sigo teniendo un problema.
Las MDIChild a medida que se van creando, se posicionan es cascada. Si yo siempre creo y destruyo las MDIChild para que siempre exista una y solo una creada, cada vez que esta se crea y se destruye, a medida que se va creando una y otra vez, va rotanto la posicion de esa cascada, lo que da un efecto visual muy desagradable, no es lo mismo cuando se crea arriba de todo que abajo de todo, se ve como se "maximiza", lo que da un efecto muy molesto. Hay alguna forma de que el formulario se visualice solo cuando todo este creado?. La verdad es que no se como evitar o que hacer para no tener ese efecto visual desagradable.

Saludos

roman 30-07-2007 05:15:12

Pues controla tú mismo la posición. Pon la propiedad Position del formulario hijo en poDefaultPosOnly y en su evento OnShow ajustas sus propiedades Left y Top a la posición deseada.

// Saludos

ArdiIIa 30-07-2007 11:58:55

Cita:

Empezado por mamu
Pero igual sigo teniendo un problema.

Si te refieres al problema del Access violation at address .....
Tal ves sea porque está tratando de hacer operaciones con un form MDI que todavía no existe. Fíjate que yo puse la función dentro del método create del formulario Child.


Cita:

Empezado por mamu
Las MDIChild a medida que se van creando, se posicionan es cascada. Si yo siempre creo y destruyo las MDIChild para que siempre exista una y solo una creada...
Saludos

Si estoy entendiendo bien, quieres decir, que solamente permites una Child visible en un momento dado... Si es así, creo que eso se aparta de la filosofía MDI.

roman 30-07-2007 17:12:13

Cita:

Empezado por ArdiIIa
Si es así, creo que eso se aparta de la filosofía MDI.

Totalmente de acuerdo. Hay cierta tendencia en los foros a manejar MDI para lo que no están diseñadas. Incluso he visto quienes quieren mostrar una MDIChild modalmente.

// Saludos

MaMu 30-07-2007 17:16:27

Cita:

Empezado por roman
Totalmente de acuerdo. Hay cierta tendencia en los foros a manejar MDI para lo que no están diseñadas. Incluso he visto quienes quieren mostrar una MDIChild modalmente.

// Saludos

Lo que pasa es que, tengo la aplicacion dividida en modo usuario y modo administrador, en modo administrador, se abren todos los childs como en una aplicacion MDI normal, pero en modo usuario no.

Saludos

MaMu 30-07-2007 17:21:14

Cita:

Empezado por roman
Pues controla tú mismo la posición. Pon la propiedad Position del formulario hijo en poDefaultPosOnly y en su evento OnShow ajustas sus propiedades Left y Top a la posición deseada.

// Saludos

Sabes, que lo he probado, y efectivamente el formulario se crea en la pos que yo defina, pero la barra de titulo, se desplaza hasta donde tendria que crearse el child y luego vuelve y se maximiza. Siempre tengo ese efecto molesto. :(

PD: todas las Childs tienen en WindowState en wsMaximized ya que las necesito maximizadas, no se si esto es lo que causa el efecto feo.

Saludos

MaMu 30-07-2007 17:53:08

SOLUCIONADO

Encontré este código por el foro, ya que a alguien tuvo este mismo problema. Y eso que busqué y busqué, pero debe ser por la forma de expresiones que abundan en todo foro de alcance internacional

Código Delphi [-]
procedure Animacionform(Enable: Boolean);
 var
   Info: TAnimationInfo;
 begin
   Info.cbSize := SizeOf(TAnimationInfo);
   LongBool(Info.iMinAnimate) := Enable;
   SystemParametersInfo(SPI_SETANIMATION, SizeOf(Info), @Info, 0);
 end;


La franja horaria es GMT +2. Ahora son las 23:02:01.

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