Ver Mensaje Individual
  #2  
Antiguo 30-08-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 27
Delphius Va camino a la fama
Te servirá esto?

Hola Khronos.
¿Te fijaste en torry?
No se que tan elaborados quieres que sean esos efectos vivos que adornan al winamp y/o a otros reproductores....

Hace tiempo experimenté generar cosas como esas, pero como me pareció un poco complicado hallar ecuaciones que me generen esas formas opté por practicar cosas más sencillas. Por ejemplo:

Código Delphi [-]
// Los nombres son inventos mios! No si tienen algún nombre específico.
//Efecto aurora:
begin
Canvas.Pen.Color := RGB(Random(255),Random(255),Random(255));
Canvas.Pen.Width := Random(3);
for i:=1 to 100 do
  begin
  Canvas.LineTo(Pto.X,Pto.Y);
  x := Random(form1.Width);
  y := Random(form1.Height);
  Canvas.LineTo(x,y);
  Canvas.Refresh;
  end;
end;

//Efecto Laser Fijo {auora }:
begin
Canvas.Pen.Color := RGB(Random(255),Random(255),Random(255));
Canvas.Pen.Width := 3;
for i:=1 to ((Random(10)+1)*10) do
  begin
  Canvas.LineTo(Pto.X,Pto.Y);
  x := Random(form1.Width);
  y := Random(form1.Height);
  Canvas.LineTo(x,y);
  Canvas.Refresh;
  end;
form1.Refresh;
end;

//Efecto Laser Rotatorio { aurora }:
begin
Pto.X := Random(form1.Width);
Pto.Y := Random(form1.Height);
Canvas.Pen.Color := RGB(Random(255),Random(255),Random(255));
Canvas.Pen.Width := 3;
for i:=1 to ((Random(10)+1)*10) do
  begin
  Canvas.LineTo(Pto.X,Pto.Y);
  x := Random(form1.Width);
  y := Random(form1.Height);
  Canvas.LineTo(x,y);
  Canvas.Refresh;
  end;
form1.Refresh;
end;

//Efecto Laser:
begin
Canvas.Pen.Color := RGB(Random(255),Random(255),Random(255));
Canvas.Pen.Width := 3;
for i:=1 to 100 do
  begin
  Canvas.LineTo(Pto.X,Pto.Y);
  x := Random(form1.Width);
  y := Random(form1.Height);
  Canvas.LineTo(x,y);
  //Canvas.Refresh;
  form1.Refresh;
  end;
form1.Refresh;
end;

//Efecto aurora doble:
begin
Canvas.Pen.Color := RGB(Random(255),Random(255),Random(255));
Canvas.Pen.Width := Random(3);
for i:=1 to 50 do
  begin
  Canvas.LineTo(Pto.X div 2,Pto.Y);
  x := Random(form1.Width);
  y := Random(form1.Height);
  Canvas.LineTo(x,y);
  Canvas.Refresh;
  Canvas.LineTo(Pto.X div 2 + Pto.X ,Pto.Y);
  x := Random(form1.Width);
  y := Random(form1.Height);
  Canvas.LineTo(x,y);
  Canvas.Refresh;
  end;
end;

//Efecto laser Fijo doble { aurora }:
begin
Canvas.Pen.Color := RGB(Random(255),Random(255),Random(255));
Canvas.Pen.Width := 3;
for i:=1 to ((Random(10)+1)*10) do
  begin
  Canvas.LineTo(Pto.X div 2,Pto.Y);
  x := Random(form1.Width);
  y := Random(form1.Height);
  Canvas.LineTo(x,y);
  Canvas.LineTo(Pto.X div 2 + Pto.X ,Pto.Y);
  x := Random(form1.Width);
  y := Random(form1.Height);
  Canvas.LineTo(x,y);
  Canvas.Refresh;
  end;
form1.Refresh;
end;

//Efecto Laser Rotatorio Multiple { aurora }
begin
for j:=1 to Random(2)+1 do
  begin
  Pto.X := Random(form1.Width);
  Pto.Y := Random(form1.Height);
  Canvas.Pen.Color := RGB(Random(255),Random(255),Random(255));
  Canvas.Pen.Width := 3;
  for i:=1 to ((Random(10)+1)*10) do
    begin
    Canvas.LineTo(Pto.X,Pto.Y);
    x := Random(form1.Width);
    y := Random(form1.Height);
    Canvas.LineTo(x,y);
    Canvas.Refresh;
    end;
  end;
form1.Refresh;
end;

// El efecto aurora y el aurora doble requiere de otro timer que se encargue de limpiar el formulario.

Se que no es lo que buscas... yo te ofrezco esas alternativas sencillas.
No está demás que para ver dichos efectos debes emplear el evento OnTimer de un timer (o si quieres algo más "elaborado": Threads).

Saludos,

EDITO Y AGREGO:
Se me olvidó decir que Pto es un TPoint, y lo uso para guardar el punto central del form.
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 30-08-2007 a las 05:27:58.
Responder Con Cita