Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Como puedo expandir un panel hacia la derecha con un efecto lento? (https://www.clubdelphi.com/foros/showthread.php?t=84265)

NelsonJG 28-09-2013 18:09:54

Como puedo expandir un panel hacia la derecha con un efecto lento?
 
Mi inquietud es la siguiente:
Tengo un panel el cual se expande para mostrar un contenido oculto hacia la derecha, controlado por un botón, ahora gráficamente el panel se desglosa de una manera brusca y no muy agradable, me gustaría saber como agregarle un efecto el cual el panel se expanda hacia la derecha lentamente controlado por un timer.

Espero sus consejos y maneras de realizar esta consulta! :D

ecfisa 28-09-2013 18:58:04

Hola NelsonJG.

Si tu Panel se oculta y visualiza podes hacer:
Código Delphi [-]
procedure AnimatePanel(P: TPanel);
begin
  if not P.Visible then
    AnimateWindow(P.Handle, 400, AW_ACTIVATE + AW_SLIDE + AW_HOR_POSITIVE)
  else
    AnimateWindow(P.Handle, 400, AW_HIDE + AW_SLIDE + AW_HOR_NEGATIVE);
  P.Visible := not P.Visible;
end;
Uso:
Código Delphi [-]
 AnimatePanel(Panel1);

Ahora, si permanece siempre visible y deseas que se expanda hacia la derecha y contraiga hacia la izquierda:
Código Delphi [-]
procedure ExpandPanel(P: TPanel; const amount: Integer);
var
  i,d: Integer;
begin
  if amount > 0 then
    d := 1
  else
    d := -1;
  for i := 1 to Abs(amount) do
  begin
    P.Width := P.Width + d;
    Application.ProcessMessages;
    Windows.Sleep(1);  // (*)
  end;
end;

Uso:
Código Delphi [-]
  ExpandPanel(Panel2, 500);  // Expande
  ...
  ExpandPanel(Panel2, -500); // Contrae
(*) Use la función Sleep a fin de simplificar el ejemplo, pero podes usar cualquier otro modo de retardo en su lugar.

Saludos :)

NelsonJG 28-09-2013 19:35:36

2 Archivos Adjunto(s)
osea tengo dos buttons, uno es para expandir y el otro es para contraer, te muestro mi codigo que le coloque a ambos button's los cuales me expande el panel y contrae

Boton Contrae
Código Delphi [-]
procedure TfrmSubFamilias.btnContraeClick(Sender: TObject);
begin
if Panel1.Width = 1140 then
 begin
 Panel1.Width := 681;
 btnExpande.Visible := True;
 btnContrae.Visible := False;
 end;
end;

Boton expande
Código Delphi [-]
procedure TfrmSubFamilias.btnExpandeClick(Sender: TObject);
begin
if Panel1.Width =  681then
 begin
 Panel1.Width := 1140;
 btnExpande.Visible := False;
 btnContrae.Visible := True;
 end;
end;

Este es mi panel contraido
Archivo Adjunto 2746
y este es expandido
Archivo Adjunto 2747

Controlado por el button, pero me gustaria que cuando expando fuera lento el proceso de expandir con unefecto de suavidad, me explico! :D

ecfisa 28-09-2013 20:08:51

Hola NelsonJG.

Si no interpreté bién tu primer mensaje, te ruego que me especifiques que es lo que deseas hacer y el código que te puse no hace.

Saludos :)

NelsonJG 28-09-2013 20:16:05

hola ecfisa.
Tu explicacion de arriba se ve super, pero soy algo nuevo en delphi y no se exactamente como implementar tu codigo con el mio.
Graficamente quiero que cuando expando mi panel fuera con suavidad osea obtener ese efecto de suavidad al momente de hacer clic en mi button de expandir igualmente lo al contraerlo.
Noce si si pueda hacer ejejje lamento mi falta de explicacion pero como te dije soy novato en delphi! seria genial si tuvieras algun ejemplo de tu manera

ecfisa 28-09-2013 20:23:06

1 Archivos Adjunto(s)
Hola Nelson.

Ahora entiendo tu problema, no te preocupes. Te adjunto un demo con dos paneles, el primero se muestra y oculta según el primer còdigo del mensaje #2 y el segundo panel, aplicando el otro método mediante dos botones.


Saludos :)

NelsonJG 28-09-2013 20:27:37

WAO es justo lo que buscaba, tratare de implementarlo y te digo luego que tal me fue, muchicimas gracias bro! S A L U D O S :D


La franja horaria es GMT +2. Ahora son las 18:32: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