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), ... 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
procedure TTombola.GirarClick(Sender: TObject); var i,j : Integer; letras : Integer; Panel : Tpanel; Etiq : Tlabel; Etiqs : Integer; NumLetra : Integer; TDIni : TIniFile; begin // Nos aseguramos que el panel este limpio de objetos for I := PanelGanadores.ComponentCount - 1 downto 0 do begin if PanelGanadores.Components[I] is TPanel then TPanel(PanelGanadores.Components[I]).Free; end; SorteaGanador; // procedimiento que obtiene el nombre ganador y lo guardamos en GanadorEleg Letras := length(GanadorEleg); // necesitamos saber cuantas letras tiene el nombre for j := 1 to letras do //Creamos tantos paneles como letra tenga el nombre begin Panel := Tpanel.Create(PanelGanadores); Panel.Parent := PanelGanadores; With Panel do begin Name := 'Panel'+IntToStr(J); Tag := J; Caption := ''; Align := alLeft; Application.ProcessMessages; AlignWithMargins := True; Margins.Left := 3; width := 58; height := 100; Application.ProcessMessages; end; end; NumLetra := 1; // inicializo esta variable para saber que letra haré girar for j := Letras -1 DownTo 0 do //Ahora creamos los objetos label que tendrá cada letra dentro de cada uno de los paneles begin Etiq := Tlabel.Create(TPanel(PanelGanadores.Components[J])); Etiq.Parent := TPanel(PanelGanadores.Components[J]); Application.ProcessMessages; With Etiq do begin Name := 'Etiq'+IntToStr(J); AlignWithMargins := True; Margins.Left := 1; width := 58; height := 116; Font.Name := 'Tahoma'; Font.Size := 60; Caption := '*'; for I := 0 to 700 do // 700 podría ser una variable que simulará cuantos "giros" dará la tómbola begin if top <= 1 then begin Top := 112; end; Top := Top - 2; // modificamos el valor top del objeto label para que de la impresión de giro dentro del panel Application.ProcessMessages; sleep(3); end; Caption := Copy(GanadorEleg,NumLetra,1); top := tActual; Inc(NumLetra); end; Application.ProcessMessages; end; 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