Geelherme 1 Denunciar post Postado Outubro 20, 2009 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
Chrnos 30 Denunciar post Postado Outubro 20, 2009 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
Geelherme 1 Denunciar post Postado Outubro 20, 2009 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
Geelherme 1 Denunciar post Postado Outubro 20, 2009 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