PDA

Ver la Versión Completa : Animación/Efecto Forms MDIChild


MaMu
28-07-2007, 23:36:17
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:

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:

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:

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.


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
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.



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
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
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
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


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