Ir al contenido


Foto

Letras Giratorias


  • Por favor identifícate para responder
3 respuestas en este tema

#1 imhenry8th

imhenry8th

    Member

  • Miembros
  • PipPip
  • 26 mensajes
  • LocationMéxico

Escrito 28 noviembre 2013 - 04:35

Hola amigos felicidades por este quinto aniversario y en espera que sean muchísimos mas.
He estado un poco alejado del foro dado que mi vida ha dado varios giros imprevistos que me han mantenido un tanto distanciado. :

Y a propósito de giros les platico que hace algunos años cuando trabaje para Elektra me encargaron que hiciera una aplicación que se usaría en Centro-América y que permitiría sortear nombres y regalos tomados de un archivo TXT; esto fue para una fiesta de fin de año en la que se sortearían regalos a los empleados de acuerdo a su número de nómina.

En aquel entonces me pidieron que lo desarrollara en Visual Basic 6.0 (Se que se escucha mal en este foro, pero es parte de mi pasado que no puedo borrar),  :p... Use unos componentes de Sheridan que permitían simular una tómbola que diera la impresión de las letras del nombre giraban una a una y al final se detenía mostrando el nombre del ganador.

Pues bien, años después me pidieron algo similar para otra fiesta de fin de año en otra empresa y se me ocurrió buscar si Sheridan tenía algún componente para Delphi y resulta que la última versión en la que libero estos componentes fue precisamente para Visual Basic 6.0
Por lo que en un rato de ocio hice una aplicación que simula el giro de una tómbola igual que el componente de Sheridan el nombre se  obtiene ya sea de una base de datos o de algún archivo de texto.

Le dejo el código que hace “girar” las letras, solo se requiere una forma, un Tpanel al que llamaremos PanelGanadores y un botón para invocar el procedimiento, el resto de los objetos se crean en tiempo de ejecución.



delphi
  1. procedure TTombola.GirarClick(Sender: TObject);
  2. var
  3.   i,j    : Integer;
  4.   letras : Integer;
  5.   Panel  : Tpanel;
  6.   Etiq  : Tlabel;
  7.   Etiqs  : Integer;
  8.   NumLetra  : Integer;
  9.   TDIni    : TIniFile;
  10. begin
  11.   // Nos aseguramos que el panel este limpio de objetos
  12.   for I := PanelGanadores.ComponentCount - 1  downto 0 do
  13.   begin
  14.     if PanelGanadores.Components[I] is TPanel then
  15.       TPanel(PanelGanadores.Components[I]).Free;
  16.   end;
  17.  
  18.   SorteaGanador; // procedimiento que obtiene el nombre ganador y lo guardamos en GanadorEleg
  19.   Letras := length(GanadorEleg); // necesitamos saber cuantas letras tiene el nombre
  20.   for j := 1 to letras do //Creamos tantos paneles como letra tenga el nombre
  21.   begin
  22.     Panel := Tpanel.Create(PanelGanadores);
  23.     Panel.Parent := PanelGanadores;
  24.     With Panel do
  25.     begin
  26.       Name              := 'Panel'+IntToStr(J);
  27.       Tag              := J;
  28.       Caption          := '';
  29.       Align            := alLeft;
  30.       Application.ProcessMessages;
  31.       AlignWithMargins  := True;
  32.       Margins.Left      := 3;
  33.       width            := 58;
  34.       height            := 100;
  35.       Application.ProcessMessages;
  36.     end;
  37.   end;
  38.   NumLetra := 1; // inicializo esta variable para saber que letra haré girar
  39.   for j := Letras -1 DownTo 0 do //Ahora creamos los objetos label que tendrá cada letra dentro de cada uno de los paneles
  40.   begin
  41.     Etiq := Tlabel.Create(TPanel(PanelGanadores.Components[J]));
  42.     Etiq.Parent := TPanel(PanelGanadores.Components[J]);
  43.     Application.ProcessMessages;
  44.     With Etiq do
  45.     begin
  46.       Name              := 'Etiq'+IntToStr(J);
  47.       AlignWithMargins  := True;
  48.       Margins.Left      := 1;
  49.       width            := 58;
  50.       height            := 116;
  51.       Font.Name        := 'Tahoma';
  52.       Font.Size        := 60;
  53.       Caption          := '*';
  54.       for I := 0 to 700 do  // 700 podría ser una variable que simulará cuantos "giros" dará la tómbola
  55.       begin
  56.         if top <= 1  then
  57.         begin
  58.           Top := 112;
  59.         end;
  60.         Top := Top - 2;  // modificamos el valor top del objeto label para que de la impresión de giro dentro del panel
  61.         Application.ProcessMessages;
  62.         sleep(3);
  63.       end;
  64.       Caption := Copy(GanadorEleg,NumLetra,1);
  65.       top := tActual;
  66.       Inc(NumLetra);
  67.     end;
  68.     Application.ProcessMessages;
  69.   end;
  70. end;




Espero que en algún momento les sea de utilidad y por supuesto que se ganen algún premio, je je je.

Reitero la felicitación, mas tarde brindaremos y festejaremos (b)  <:o)

  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 28 noviembre 2013 - 05:10

Gracias por el aporte amigo.
  • 0

#3 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 28 noviembre 2013 - 05:12

He movido este tema a Trucos, te parece bien amigo si lo comparto en face?
  • 0

#4 imhenry8th

imhenry8th

    Member

  • Miembros
  • PipPip
  • 26 mensajes
  • LocationMéxico

Escrito 28 noviembre 2013 - 05:16

Por supuesto, que puedes compartirlo.


  • 0




IP.Board spam blocked by CleanTalk.