Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Efectos de Ventanas (https://www.clubdelphi.com/foros/showthread.php?t=61195)

gerald 29-10-2008 16:17:02

Efectos de Ventanas
 
Tengo un form q trabaja como un grid y con un boton se me ejecuta. Quisiera saber como le puedo dar un efecto al mostrar y al ocultar sin usar las api de windows porq deberia de ejecutarse en cualquier version de windows Si me pudieran ayudar agradeceria mucho.....

enecumene 29-10-2008 16:30:40

Hola, al menos deberías explicar qué clase de efectos necesitas, eso es algo extenso ;)

Saludos.

gerald 29-10-2008 16:49:45

Cita:

Empezado por enecumene (Mensaje 323116)
Hola, al menos deberías explicar qué clase de efectos necesitas, eso es algo extenso ;)

Saludos.

Mostrar y ocultar la ventana como si se desvaneciera desde abajo hacia arriba cuando se oculta y arriba hacia abajo cuando se muestra. no lento pero no tan rapido me entiendes???

ContraVeneno 29-10-2008 19:47:03

con TForms no se como se pueda hacer, pero con las DevExpress, puedes usar un TDockPanel, agregar páneles y listo.

Lepe 29-10-2008 19:52:45

El efecto de desvanecerse está disponible desde windows 2000 (con algún service pack) o superior y en delphi, creo recordar que desde delphi 6 con las propiedades AlphaBlend, etc...

¿de verdad tienes windows 95/98 todavía por ahí?

Algo que sí te va a funcionar en todos los windows es el "Roll up" esto es, decrementar el Height y width del TForm hasta que sean muy pequeños y después ocultar la ventana.

Saludos

gerald 29-10-2008 20:32:30

no entiendo exactamente lo qme dices papa y como es un programa administrativo no deseo tener problemas con que windows usan los clientes por eso no quiero meterme en eso. Si me podrias explicar eso q me dijiste seria de mucha ayuda estoy urgido por solucionar ese incomveniente

Lepe 30-10-2008 18:07:39

Pon esto en un botón de la ventana que quieres ocultar:
Código Delphi [-]

var PasoAnimaciones :integer;
begin
  PasoAnimaciones := 2;

while ClientHeight >3 do
begin
  Height := Height -PasoAnimaciones;
  Top := Top + Pasoanimaciones;
  application.ProcessMessages;
  application.ProcessMessages;
end;
Hide;

En otro botón, pon este código, hará la animación de mostrarse:
Código Delphi [-]
var PasoAnimaciones :integer;
    FAlto :integer;
    FAncho:integer;
begin
  PasoAnimaciones := 2;
  FAlto := 200; // alto que se quiere de la ventana
  FAncho := 300;
    Width:=3;
    ClientHeight:= Pasoanimaciones;
    Show;
    Height := 1;
    while Height < FAlto do
    begin
      Height:= Height+Pasoanimaciones;
      application.ProcessMessages;
      application.ProcessMessages;
    end;
 end;
 Selft.SetBounds(left, top,  Falto, Fancho);

gerald 30-10-2008 20:53:50

ok entiendo porq mandas a ejecutar dos veces el aplication.processmessages eso no lo entiendo

Lepe 30-10-2008 21:06:58

En principio, al haber 2 llamadas, hace una pausa más grande, ya que los eventos de repintado tienen poca prioridad en windows.

La verdad, ese código tiene bastante tiempo, no recuerdo si produce algún tipo de fallo al repintar, con uno debería bastar.

Saludos

gerald 30-10-2008 21:12:50

entiendo porq yo hize uno pero con el form como si fuera un grid y bueno no me da problemas pero al hacer click a donde se activa otro evento la primera vez funciona bien pero despues mientras hace el cerrado del form y se activa el otro evento pareciera q no terminara el proceso y deja la mitad del form ahi. cuando se termina la ejecucion del otro regresa al del form lo termina de cerrar y como el optro evento q uso tiene el evento repeatclick se vuelva a ejecutar y no se ve nada bien. No se como solucionar el problema por eso te pregunto sobre el metodo application.processmessages porq yo uso solo uno no se si deba colocar dos o hay otra forma de hacerlo de todas maneras aqui te paso el codigo ahi solo le faltan las coordenadas de donde se encuentra el grid pero ese funciona

procedure TFFComboBox.EjecutarEfecto(canActivate :Boolean ; pSize :Integer ; pAlign :tAlign );
var nSize: integer;
begin
nSize := 0;
while nSize < GRID_ComboBox.Height +4 do
begin
nSize := nSize + pSize;
if (nSize > GRID_ComboBox.Height +4) then
pSize := (GRID_ComboBox.Height - (nSize - pSize)) + 2;

//Formulario Activo
if canActivate = True then
begin
if not (Height > GRID_ComboBox.Height +4) then
Height := Height + pSize;
end
//oculta el formulario
else if canActivate = False then
begin
if not (Height = 0) then
begin
Height := Height - pSize;
end
end;
Application.ProcessMessages;
end;
end;

Lepe 30-10-2008 23:49:49

No entiendo muy bien tu explicación, pero según dices, deberías sustituir el Application.processmessages por Update.

Processmessages hace que el programa "respire", por eso permite intercalar la ejecución de ese otro evento mientras se está cerrando el Form.

Update lo que hace es forzar el repintado de la ventana, pero no deja "respirar" a la aplicación. En este caso, mientras se esté cerrando el Form, no permitirá ejecutar intercalar la ejecución de ese evento que hablas.

Prueba a ver.

Saludos


La franja horaria es GMT +2. Ahora son las 05:17:37.

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