Sortear imagens dentro de TImagem?

Delphi

14/07/2006

Boa tarde amigos delphianos, o meu problema é o seguinte: Tenho 40 figuras dentro de uma pastas chamada minhasfiguras, com os nomes assim figura1, figura2, figura3...ate figura40.

O que eu gostaria é de saber se tem como sortear 6 figuras que estaum dentro desta pasta e jogar em 6 TImagem que estaum dentro de um form. Naum podendo repetir a cada sorteio as mesmas figuras nestes 6 TImagens.

Penso eu que é feito com randomize, mais naum sei como se fazer.

Se alguem puder mi ajudar ficarei grato.


Jlimajr

Jlimajr

Curtidas 0

Respostas

Night_man

Night_man

14/07/2006

var
  Veses: Integer;
  Sorteado: String;
  JaSorteados: TStrings;
begin
  JaSorteados := TStringList.Create;
  try
    for Veses := 1 to 6 do
    begin
      repeat
        Sorteado := IntToStr(RandomRange(1, 40));
      until (JaSorteados.IndexOf(Sorteado) < 0);

      JaSorteados.Add(Sorteado);
      (FindComponent(´Imagem´ + IntToStr(Veses)) as TImage).Picture.LoadFromFile(´Arquivo´ + Sorteado + ´.bmp´);
    end;
  finally
    JaSorteados.Free;
  end;



GOSTEI 0
Jlimajr

Jlimajr

14/07/2006

Amigo grato pela resposta, mais esta função RandomRange tem no Delphi 5?
Sorteado := IntToStr(RandomRange(1, 40)); 


está dando erro
[Error] Unit1.pas(488): Undeclared identifier: ´RandomRange´ [Fatal Error] Project1.dpr(5): Could not compile used unit ´Unit1.pas´



GOSTEI 0
Adriano Santos

Adriano Santos

14/07/2006

Amigo grato pela resposta, mais esta função RandomRange tem no Delphi 5?
Sorteado := IntToStr(RandomRange(1, 40)); 
está dando erro [quote:284d7501c8][Error] Unit1.pas(488): Undeclared identifier: ´RandomRange´ [Fatal Error] Project1.dpr(5): Could not compile used unit ´Unit1.pas´
[/quote:284d7501c8]

Use Random no lugar.


GOSTEI 0
Jlimajr

Jlimajr

14/07/2006

Usei o ramdom assim:
Sorteado := IntToStr(Random(40));

Passou na hora de compilar mais quando pesso para sortear, da erro ´Access violation address 0045EE09 in module Project1.exe Read of address 00000128´ e aponta para esta linha.
FindComponent(´Imagem´ + IntToStr(Veses)) as TImage).Picture.LoadFromFile(´Arquivo´ + Sorteado + ´.bmp´);



GOSTEI 0
Jlimajr

Jlimajr

14/07/2006

Usei o ramdom assim:
Sorteado := IntToStr(Random(40));

Passou na hora de compilar mais quando pesso para sortear, da erro ´Access violation address 0045EE09 in module Project1.exe Read of address 00000128´ e aponta para esta linha.
FindComponent(´Imagem´ + IntToStr(Veses)) as TImage).Picture.LoadFromFile(´Arquivo´ + Sorteado + ´.bmp´);



GOSTEI 0
Night_man

Night_man

14/07/2006

Foi mal, a randomrange esta na unit Math;

assim, random(40), vai sortear um numero >= 0 e <= 39,

pode ser tb, mas dai faz random(40) + 1


Como q eu escrevo VeSes... e ninguem me avisa,
o anarfabetico....


[]´s


GOSTEI 0
Jlimajr

Jlimajr

14/07/2006

Ja tinha declarado no uses a bliblioteca Math, só que naum funcionou, ai coloquei o random mesmo. Só que nao consigo entender esta linha

Código:
FindComponent(´Imagem´ + IntToStr(Veses)) as TImage).Picture.LoadFromFile(´Arquivo´ + Sorteado + ´.bmp´);

Porque da erro aqui assim:

´Access violation address 0045EE09 in module Project1.exe Read of address 00000128´

Poderia me dizer o que seria ´Imagem´ e ´Arquivo´. sorteado


GOSTEI 0
Night_man

Night_man

14/07/2006

No Delphi 6, tem essa RandomRange na Math, mas deixa assim...


1º) ´´Imagem´, eh o nome do componente TImegem,

tu deve ter Image1, Image2, Image3, Image4, Image5, Image6,

Se for assim coloque ´Image´ no lugar do ´Imagem´

essa funcao Findcomponent, vai retornar um componente com o nome passado como parametro.

por exemplo findcomponent(´Form1´), vai retornar o componente que tenha como nome Form1.


2º) ´Arquivo´ eh o nome do arquivo, q no teu caso eh ´Figura´, ou seja, carregar o arquivo Figura20.bmp, se o nº 20 for o sorteado.


GOSTEI 0
Jlimajr

Jlimajr

14/07/2006

Desculpe a demora em responder.

Cara ficou o bixo mano.

Perfeito, melhor estraga... :D


Fico grato por me ajudar NiGHT_MaN


GOSTEI 0
POSTAR