Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Disolver a un Form al cerrarlo (https://www.clubdelphi.com/foros/showthread.php?t=29680)

Deiv 29-01-2006 15:34:27

Disolver a un Form al cerrarlo
 
Hola,
Alguien conoce algún componente de como disolver un Form?, es decir, he visto en el programa Registry Clean Expert (No sé si lo conoceis: http://www.registry-clean.net/) que al salir del mismo (al cerralo) este va disolviendose cual si la transparencia cada vez fuera mayor (va volviendose transparente hasta desaparecer todo el Form), dicha transparencia se ve en en la totalidad del Form.
No es un form del tipo transparente ya que esos Forms conservan las propiedades de la barra del título por ejemplo. Si en Torry's lo hay, con que nombre busco? ó ¿como realizo esta disolución por código para que muestre este efecto al cerrar un Form?
Un Saludo

vtdeleon 29-01-2006 15:52:10

Saludos

Si te refieres a ponerlo transparente degradandolo debes usar las propiedades AlphaBlend y AlphaBlendValue para el caso.

dec 29-01-2006 17:33:36

Hola,

Prueba con la función "AnimateWindow". Por ejemplo, sitúa el siguiente código en el evento "OnClose" del formulario principal de tu aplicación:

Código Delphi [-]
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  AnimateWindow(Self.Handle, 500, AW_HIDE or AW_BLEND);
end;
Echa un vistazo a la ayuda de la función "AnimateWindow", puesto que esta te ofrece más posibilidades que las mostradas arriba.

Deiv 30-01-2006 22:54:39

Acabo de leer los post,
He estado intentando con AlphaBlend, en cambio con AnimateWindow lo probaré llegando a casa.

Se me presentó la siguiente duda:

Código Delphi [-]
var
i:integer=255;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i:integer;
begin
   Form1.AlphaBlend:=true;
   timer1.enabled:=true;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
    i:=i-1;
    Form1.AlphaBlendValue:=i;
    if i = 80 then
        timer1.Enabled:=false
end;
end.
En este código no pasa nada, pero si el mismo le implemento a un Button al evento OnClick, si trabaja, ¿donde está la diferencia?, pareciera que no hace caso el Timer al evento OnClose. ¿Donde estoy fallando?
Saludos

seoane 30-01-2006 23:23:00

El problema es que aunque actives el timer la aplicacion se cierra sin esperar a que ocurra el primer evento del timer.

Prueba con esto:

Código:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: integer;
begin
  AlphaBlend:=true;
  UpdateWindow(Handle);
  for i:= 50 downto 10 do
    begin
      AlphaBlendValue:= 5*i;
      Sleep(50);
    end;
end;

O prueba con este otro que va haciendo mas pequeño el formulario hasta que desaparece. Hay un monton de posibilidades :)

Código:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: integer;
  Rgn: HRGN;
begin
  for i:= 50 downto 1 do
    begin
      Rgn:= CreateRectRgn(0,0,(width*i) div 50,(height*i) div 50);
      SetWindowRgn(Handle,Rgn,True);
      DeleteObject(Rgn);
      Sleep(50);
    end;
end;


vtdeleon 31-01-2006 01:34:34

Saludos

Sin dar muchas vueltas, creo que es mas factible la solucion propuesta por dec.

Zeta 31-01-2006 04:06:58

Cita:

Empezado por Deiv
Hola,
Alguien conoce algún componente de como disolver un Form?, es decir, he visto en el programa Registry Clean Expert (No sé si lo conoceis: http://www.registry-clean.net/) que al salir del mismo (al cerralo) este va disolviendose cual si la transparencia cada vez fuera mayor (va volviendose transparente hasta desaparecer todo el Form), dicha transparencia se ve en en la totalidad del Form.
No es un form del tipo transparente ya que esos Forms conservan las propiedades de la barra del título por ejemplo. Si en Torry's lo hay, con que nombre busco? ó ¿como realizo esta disolución por código para que muestre este efecto al cerrar un Form?
Un Saludo

El componente Billenium Effects hace eso que pides.

Saludos.

Deiv 31-01-2006 15:04:51

Realmente da gusto pertenecer al Foro, hace un mes atrás lo dije, y menciono esto porque muchos colaboran con sus conocimientos y experiencias.

Hubo razón en mis sospechas, al cerrar el Form no funciona el Timer.
El primer código de Seoane, trabaja muy bien la disolución, pero me parece que en la línea:

UpdateWindow(Handle);

Realiza UN DESTELLO antes de disolver el Form. ¿A que se debe ello? ¿como evitarlo?

Saludos
Pd.- De todas maneras probaré todos los otros consejos que aportaron.


La franja horaria es GMT +2. Ahora son las 17:24:43.

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