Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-07-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 20
gontxalo Va por buen camino
Esto es lo que tengo puesto

Este es el truco. En una unit:

unit UTalea;
{Radikal, Q3 para Trucomania.}
interface
uses Windows,SysUtils;
type
{Array de booleanos de longitud variable}
TArrayBool = array[0..0] of boolean;
PArrayBool = ^TArrayBool;
{Clase para manejar numeros aleatorios}
TAlea = class
Maximo : integer; //Valor maximo de los numeros obtenidos
Lista : PArrayBool;
FaltanDeSacar : integer;
constructor Create(Rango:integer);
destructor Destroy; override;
procedure Reset; //Resetea la lista de numeros
function PillaNumero:integer; //Devuelve un numero aletorio sin repeticion
end;

implementation

constructor TAlea.Create(Rango:integer);
begin
{
Si los números a extraer no pueden ser repetidos
hemos de crear un array para almacenar cual ha salido y cual no
Como el array ha de ser variable, usamos el GetMem y
los punteros para que sirva tambien para versiones
anteriores a Delphi 4, que no incorporan los arrays
de longitud variable...
}
inherited Create;
Maximo:=Rango;
FaltanDeSacar:=Rango;
{Reservamos memoria para el array de longitud variable}
GetMem(Lista, 1+Maximo * SizeOf(Boolean));
ZeroMemory(Lista,1+Maximo * SizeOf(Boolean));
end;
destructor TAlea.Destroy;
begin
if Assigned(Lista) then FreeMem(Lista, 1+Maximo * SizeOf(Boolean));
inherited Destroy;
end;
function TAlea.PillaNumero:integer;
var
Numero: integer;
begin
if FaltanDeSacar=0 then raise exception.create( 'Error. No se pude sacar otro numero sin repetir'+#13+#10+
'Error. No more numbers are available');
{Buscamos un número que no haya salido ya}
Randomize;
repeat Numero:=Random(Maximo) until NOT Lista^[Numero];
{Lo apuntamos en la lista de numeros ya usados}
Lista^[Numero]:=TRUE;
{Decrementamos la cantidad de numeros que faltan por salir}
Dec(FaltanDeSacar);
Result:=Numero;
end;
procedure TAlea.Reset;
begin
ZeroMemory(Lista,1+Maximo * SizeOf(Boolean));
FaltanDeSacar:=Maximo;
end;
end.

LLuego en u form con un botón:

procedure TForm11.Button1Click(Sender: TObject);
var
Ristra : TAlea;
n : integer;
begin
Memo1.Lines.Clear;
Memo2.Lines.Clear;
Memo3.Lines.Clear;
Memo4.Lines.Clear;
Memo5.Lines.Clear;
Memo6.Lines.Clear;
Ristra:=TAlea.Create(50);
{Sacamos x numero sin repetir}
for n:=1 to 1 do begin
memo1.lines.Add( IntToStr(Ristra.PillaNumero) );
Form11.Memo1.visible:= true
end;
for n:=1 to 1 do begin
memo2.lines.Add( IntToStr(Ristra.PillaNumero) );
end;
for n:=1 to 1 do begin
memo3.lines.Add( IntToStr(Ristra.PillaNumero) );
end;
for n:=1 to 1 do begin
memo4.lines.Add( IntToStr(Ristra.PillaNumero) );
end;
for n:=1 to 1 do begin
memo5.lines.Add( IntToStr(Ristra.PillaNumero) );
end;
for n:=1 to 1 do begin
memo6.lines.Add( IntToStr(Ristra.PillaNumero) );
end;
Ristra.Free
end;


Así se generan los números aleatorios, pero si en vez de los números necesito que saqlgan las imágenes, entonces como le puedo decir que si es el número uno el que sale corresponde a la imágen 1 y si sale el dos corresponde a la imágen 2 .........

Gracias
Responder Con Cita
  #2  
Antiguo 28-07-2005
kalisto kalisto is offline
Miembro
 
Registrado: jul 2004
Posts: 62
Poder: 20
kalisto Va por buen camino
con todas las imagenes dentro de un directorio, puedes utilizar findfirst y findnext para añadir el path de las mismas a una stringlist y con los numeros que te da la funcion que ya tienes puedes acceder al path de estas y cargar las imagenes en timages por ejemplo.

Algo asi:
Código:
  mitimage1.picture.loadfromfile(mistringlist[Ristra.PillaNumero])
Responder Con Cita
  #3  
Antiguo 30-07-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 20
gontxalo Va por buen camino
Se puede cambiar la posición de la imágen que aparece?

Lo tengo gracias.

Pero hay alguna forma de que cuando le diga que si sale el dos, sale la imágen dos, es decir Image2.Visible := True pero decirle donde tiene que aparecer la imágen ? Que no salga donde la tengo en el form en visible := false, si no diciéndola que sea visible en las coordenadas 152, 408 del form?

Gracias
Responder Con Cita
  #4  
Antiguo 01-08-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Teniendo la función Random(n) que te genera un número aleatorio de 0 a n, y sabiendo que las coordenadas de los controles son valores numéricos.... ¿No se te ocurre una combinación de estas dos cosas?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:35:36.


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
Copyright 1996-2007 Club Delphi