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 25-07-2005
gontxalo gontxalo is offline
Miembro
 
Registrado: may 2005
Posts: 99
Poder: 20
gontxalo Va por buen camino
imágenes aleatorias

Hola
He leído varios hilos sobre números aleatorios, pero no he encontrado nada sobre imágenes aleatorias. En trucomanía tampoco.

En un form, dando a un botón como podría generar imágenes aleatorias de entre 50 por ejemplo.

Tengo 50 imágenes y quiero que al dar a un botón me salgan aleatoriamente 5 de ellas.

Lo tengo que me salgan números pero ahora necesito que en vez de los números me salgan imágenes de entre 50.

Gracias
Responder Con Cita
  #2  
Antiguo 25-07-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 esas 50 imágenes, simplemente las tienes que tener indexadas de 1..50 y averiguando un número en este rango (RandomRange) tienes tu imagen aleatoria!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 26-07-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Como dice Federico, tienes 50 imagenes, por tanto son cuantitativos. Puedes referenciar cada imagen con un numero (del 1..50) y realizar el procedimiento de buscar numeros aleatorios(No he visto el Truco).

Si con procedimiento salieron el 5,10,48,39,40; buscas las imagenes correspondientes a esos numeros.
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #4  
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
  #5  
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
  #6  
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
  #7  
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 09:51:28.


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