Random com varios TEdit...

Delphi

11/01/2023

Boa noite pessoal.

Estou querendo fazer um random de uma constante dentro do Delphi

No exemplo abaixo estou conseguindo fazer

procedure TForm1.Button1Click(Sender: TObject);
CONST
  valores : array [0..6] of string = (''1'', ''2'', ''3'', ''4'', ''5'', ''6'', ''7'');
begin
  Label1.Text := valores[Random(6)];
end;


Até ai tudo bem. Acontece que dessa forma fica os valores fixos.

Gostaria de saber se tem como eu fazer utilizando TEdit. Tentei da forma abaixo mais não tive êxito

procedure TForm1.Button2Click(Sender: TObject);
CONST
  valores : array [0..6] of string = (Edit1.Text, Edit2.Text, Edit3.Text, Edit4.Text, Edit5.Text, Edit6.Text, Edit7.Text);

begin
  Label2.Text := valores[Random(6)];
end;


Dessa forma o valor que eu colocar dento de cada Edit, ao clicar no botão me retornaria o valor digitado. Esta me retornando erro ao compilar >> Constant expression expected .
Rubens Pena

Rubens Pena

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

12/01/2023

procedure TForm1.Button2Click(Sender: TObject);
vat
  valores : array [0..6] of string;
begin
  valores[0] := Edit1.Text;
  valores[1] := Edit2.Text;
  valores[2] := Edit3.Text;
  valores[3] := Edit4.Text;
  valores[4] := Edit5.Text;
  valores[5] := Edit6.Text;
  valores[6] := Edit7.Text;

  Label2.Text := valores[Random(6)];
end;
GOSTEI 1

Mais Respostas

Arthur Heinrich

Arthur Heinrich

11/01/2023

Sua construção original não funcionou porque a definição de uma constante não pode depender de objetos criados em tempo de execução. Apenas valores literais são aceitos.

Além disso, no seu código o array possui 7 posições, de 0 a 6. Ao utilizar o Random(6), você obterá valores que vão de 0 a 5, nunca selecionando a última opção no array.

Você também pode utilizar um memo, para carregar os valores, um por linha, podendo utilizar:

Label2.Text := Memo.Lines[Random(Memo.Lines.Count)];
GOSTEI 1
Rubens Pena

Rubens Pena

11/01/2023

procedure TForm1.Button2Click(Sender: TObject);
vat
  valores : array [0..6] of string;
begin
  valores[0] := Edit1.Text;
  valores[1] := Edit2.Text;
  valores[2] := Edit3.Text;
  valores[3] := Edit4.Text;
  valores[4] := Edit5.Text;
  valores[5] := Edit6.Text;
  valores[6] := Edit7.Text;

  Label2.Text := valores[Random(6)];
end;


Obrigado mestre Emerson Nascimento, funcionou.
GOSTEI 0
Rubens Pena

Rubens Pena

11/01/2023

Sua construção original não funcionou porque a definição de uma constante não pode depender de objetos criados em tempo de execução. Apenas valores literais são aceitos.

Além disso, no seu código o array possui 7 posições, de 0 a 6. Ao utilizar o Random(6), você obterá valores que vão de 0 a 5, nunca selecionando a última opção no array.

Você também pode utilizar um memo, para carregar os valores, um por linha, podendo utilizar:

Label2.Text := Memo.Lines[Random(Memo.Lines.Count)];


Obrigado mestre Arthur Henrique, seu exemplo funcionou, acabei de ter uma nova ideia. E obrigado pela explicação.
GOSTEI 0
POSTAR