Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Geelherme

[Resolvido] Pedir dados N vezes ao usuario

Recommended Posts

Olá,

 

criei um vetor alocado dinamicamente e gostaria que o usuario preenchesse as informações em um form baseado na quantidade de elementos desse vetor. O usuario digita a quantidade de parcelas de um produto, e o programa deveria pedir os valores de vetor um por um até chegar ao seu limite. Estou meio perdido em como fazer isso, tentei usar um for, mas ele faz a operação e vai direto até o último elemento depois do primeiro clique. Acredito que ele saia acrescentando um por um com o mesmo valor, e assim não serve.

 

form1

procedure TForm1.Button1Click(Sender: TObject);
begin
  QntItems := StrToInt(Edit1.Text);
  QntParcelas := StrToInt(Edit2.Text);
  SetLength(Form3.Parcelas, QntParcelas);
  SetLength(Form3.Programas, QntItems);
  Form2.Show;
end;

form2

procedure TForm2.Button1Click(Sender: TObject);
begin
  for i := 0 to Form1.QntParcelas do
  begin
    Form3.Parcelas[i] := StrToInt(Edit1.Text);
    Label1.Caption := IntToStr(Form3.Parcelas[i]);    // essas linhas são só para eu saber se ele tá guardando o valor corretamente
    Label2.Caption := IntToStr(i);                    // e a posição do vetor que ele se encontra
  end;

end;

Além de ele preencher todos os elementos do vetor, quando eu clico no botão, ele volta ao início do for. Acho que eu teria que criar uma função, e o botão chamasse essa função, é isso mesmo? alguém pode me ajudar a fazer isso?

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vejo porque usar um for para o usuário preencher os dados... basta você por os edits na tela, por um botão para adicionar e codificar nele o procedimento de gravação, usando uma variável global no form para controlar quantos registros já foram inseridos... ai, antes de jogar pro vetor, você testaria se essa global ainda é menor que o máximo de dados que o vetor comporta e, se não fosse, bastaria dar um showmessage avisando o usuário que o vetor já está totalmente preenchido...

 

Para visualizar, você poderia ir jogando os dados do vetor num TStringGrid por exemplo... assim, a cada insert pelo botão, o usuário já veria os dados inseridos no Grid.

 

O for nesse caso é dispensável... a menos que vá utilizá-lo para preencher o grid com valores aleatórios.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Chrnos, agradeço a resposta, mas veja o que acontece:

1. Eu criei um form com um EDIT e um Botao apenas para inserir os dados desse vetor. Nesse form, existe apenas um edit que deve funcionar para gravar os dados do elemento, 1, 2, 3, ..., x do meu vetor. Eu estou com pouco espaço na tela, e justamente por isso eu gostaria de usar a menor quantidade possível de componentes visiveis.

 

Eu estive pensando em criar um procedure InsereNoVetor() e o botão chamar esse procedure cada vez que eu clicar nele, além de incrementar o valor de minha variável contadora, mas não sei ainda como declarar procedures. Você pode me ajudar nisso? Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver, abaixo o código:

 

procedure AdicionaNoVetor(i: integer);
begin
    if i < Length(Form3.Parcelas) then
    begin
    Form3.Parcelas[i] := StrToInt(Form2.Edit1.Text);
//    Form2.Label1.Caption := IntToStr(Form3.Parcelas[i]);
//    Form2.Label2.Caption := IntToStr(i);
//    Form2.Label3.Caption := IntToStr(Length(Form3.Parcelas));
    Form2.Edit1.Clear;
    end;
    if i > Length(Form3.Parcelas) then
    begin
      ShowMessage('ERRO');
    end;

end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  AdicionaNoVetor(i);
  inc(i, 1);
//  Label3.Caption := Form3.Parcelas[1] +
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.