Salvando Valores de componentes criados em tempo de execução
Olá,
Após MUITO aprender aqui no forum, venho lhes pedir ajuda.
O meu problema é o seguinte: No sistema que estou desenvolvendo existe uma tela em que são apresentados os itens de uma determinada tabela (atualmente com 24 registros). Esta tela apresenta vários edits com os valores dos campos desta tabela e são criados em tempo de execução.
Assim, quando é chamado o FormShow a rotina abaixo é disparada para criar esses edits.
procedure TForm1.FormShow(Sender: TObject);
Var
EditDescricao, EditQuantidade : TEdit;
EditValor : TCurrencyEdit;
TopoDescricao, EsquerdaDescricao : Integer;
TopoValor, EsquerdaValor : Integer;
TopoQuantidade, EsquerdaQuantidade : Integer;
Registros, Total : Integer;
begin
TopoDescricao := 30;
EsquerdaDescricao := 24;
TopoValor := 30;
EsquerdaValor := 245;
TopoQuantidade := 30;
EsquerdaQuantidade := 326;
Table1.First;
Registros := Table1.RecordCount;
For Total := 0 To Registros -1 Do
Begin
EditDescricao := TEdit.Create(Form1);
EditDescricao.Parent := ScrollBox1;
EditDescricao.Name := ´EditDescricao´ + IntToStr(Registros);
EditDescricao.Height := 21;
EditDescricao.Width := 220;
EditDescricao.Top := TopoDescricao;
EditDescricao.Left := EsquerdaDescricao;
EditDescricao.Text := Table1.FieldValues[´Descricao´];
TopoDescricao := TopoDescricao + 23;
EditValor := TCurrencyEdit.Create(Form1);
EditValor.Parent := ScrollBox1;
EditValor.Name := ´EditValor´ + IntToStr(Registros);
EditValor.Height := 21;
EditValor.Width := 80;
EditValor.Top := TopoValor;
EditValor.Left := EsquerdaValor;
EditValor.Text := Table1.FieldValues[´Valor´];
TopoValor := TopoValor + 23;
EditQuantidade := TEdit.Create(Form1);
EditQuantidade.Parent := ScrollBox1;
EditQuantidade.Name := ´EditQuantidade´ + IntToStr(Registros);
EditQuantidade.Height := 21;
EditQuantidade.Width := 40;
EditQuantidade.Top := TopoQuantidade;
EditQuantidade.Left := EsquerdaQuantidade;
EditQuantidade.Text := ´0´;
TopoQuantidade := TopoQuantidade + 23;
Registros := Registros - 1;
Table1.Next;
End;
end;
Bom, até este ponto está tudo funcionando que é uma beleza. Se eu adiciono ou removo um registro da tabela na próxima vez que o form for mostrado as modificações estarão lá.
Agora vem o real problema: Como pegar os dados desses edits e jogá-los em uma tabela, sendo que o valor do campo ´valor´ tem que ser a multiplicação do valor (do editvalor ´n´) multiplicado pelo valor do edit quantidade ´n´ (Ex.: EditValor1 * EditQuantidade1)?
Bom, espero que tenha sido claro na explicação do meu problema. Se alguém puder dar uma luz, agradeceria.
Obrigado a todos e se puder ajudar alguém de alguma forma, é só falar.
[] s e boa programação.
Após MUITO aprender aqui no forum, venho lhes pedir ajuda.
O meu problema é o seguinte: No sistema que estou desenvolvendo existe uma tela em que são apresentados os itens de uma determinada tabela (atualmente com 24 registros). Esta tela apresenta vários edits com os valores dos campos desta tabela e são criados em tempo de execução.
Assim, quando é chamado o FormShow a rotina abaixo é disparada para criar esses edits.
procedure TForm1.FormShow(Sender: TObject);
Var
EditDescricao, EditQuantidade : TEdit;
EditValor : TCurrencyEdit;
TopoDescricao, EsquerdaDescricao : Integer;
TopoValor, EsquerdaValor : Integer;
TopoQuantidade, EsquerdaQuantidade : Integer;
Registros, Total : Integer;
begin
TopoDescricao := 30;
EsquerdaDescricao := 24;
TopoValor := 30;
EsquerdaValor := 245;
TopoQuantidade := 30;
EsquerdaQuantidade := 326;
Table1.First;
Registros := Table1.RecordCount;
For Total := 0 To Registros -1 Do
Begin
EditDescricao := TEdit.Create(Form1);
EditDescricao.Parent := ScrollBox1;
EditDescricao.Name := ´EditDescricao´ + IntToStr(Registros);
EditDescricao.Height := 21;
EditDescricao.Width := 220;
EditDescricao.Top := TopoDescricao;
EditDescricao.Left := EsquerdaDescricao;
EditDescricao.Text := Table1.FieldValues[´Descricao´];
TopoDescricao := TopoDescricao + 23;
EditValor := TCurrencyEdit.Create(Form1);
EditValor.Parent := ScrollBox1;
EditValor.Name := ´EditValor´ + IntToStr(Registros);
EditValor.Height := 21;
EditValor.Width := 80;
EditValor.Top := TopoValor;
EditValor.Left := EsquerdaValor;
EditValor.Text := Table1.FieldValues[´Valor´];
TopoValor := TopoValor + 23;
EditQuantidade := TEdit.Create(Form1);
EditQuantidade.Parent := ScrollBox1;
EditQuantidade.Name := ´EditQuantidade´ + IntToStr(Registros);
EditQuantidade.Height := 21;
EditQuantidade.Width := 40;
EditQuantidade.Top := TopoQuantidade;
EditQuantidade.Left := EsquerdaQuantidade;
EditQuantidade.Text := ´0´;
TopoQuantidade := TopoQuantidade + 23;
Registros := Registros - 1;
Table1.Next;
End;
end;
Bom, até este ponto está tudo funcionando que é uma beleza. Se eu adiciono ou removo um registro da tabela na próxima vez que o form for mostrado as modificações estarão lá.
Agora vem o real problema: Como pegar os dados desses edits e jogá-los em uma tabela, sendo que o valor do campo ´valor´ tem que ser a multiplicação do valor (do editvalor ´n´) multiplicado pelo valor do edit quantidade ´n´ (Ex.: EditValor1 * EditQuantidade1)?
Bom, espero que tenha sido claro na explicação do meu problema. Se alguém puder dar uma luz, agradeceria.
Obrigado a todos e se puder ajudar alguém de alguma forma, é só falar.
[] s e boa programação.
Plautz
Curtidas 0
Respostas
Maxsoftware
07/02/2004
Dados.Tb_CadCli.FieldByName(´VALOR´).AsString:= CURRTOSTR(STRTOCURR(EditValor)* STTTOCURR(EditQuantidade1.TEXT));
Veja se vai funcionar...
Ass: MAx...
Veja se vai funcionar...
Ass: MAx...
GOSTEI 0
Plautz
07/02/2004
Obrigado por tentar ajudar Max, mas creio que não fui muito claro na questão.
Nesse caso, os Edits para os valores terão os nomes como abaixo:
EditValor0
EditValor1...
EditValor ´n´ (quantidade de registros, no caso vai até EditValor24)
O mesmo para os Edits de Quantidade.
Só que os nomes (e os valores) para os componentes são dados em runtime:
E dessa forma, após sua criação é colocado o conteudo nele:
Assim, após essa ´bagunça´ toda, eu não consegui varrer os componentes e gravar os dados na tabela.
De qualquer maneira, obrigado mais uma vez.
[]s e boa programação.
Nesse caso, os Edits para os valores terão os nomes como abaixo:
EditValor0
EditValor1...
EditValor ´n´ (quantidade de registros, no caso vai até EditValor24)
O mesmo para os Edits de Quantidade.
Só que os nomes (e os valores) para os componentes são dados em runtime:
EditDescricao.Name := ´EditDescricao´ + IntToStr(Registros); // Registros := Table1.RecordCount
E dessa forma, após sua criação é colocado o conteudo nele:
EditDescricao.Text := Table1.FieldValues[´Descricao´];
Assim, após essa ´bagunça´ toda, eu não consegui varrer os componentes e gravar os dados na tabela.
De qualquer maneira, obrigado mais uma vez.
[]s e boa programação.
GOSTEI 0
Mikelustosa
07/02/2004
tente assim:
var
I: Integer;
Recebe_combo: string;
begin
for i := 0 to Pred(ComponentCount) do // usado para varrer os componenentes do tipo Edit
if (Components[i] is TEdit) and (TEdit(Components[i]).Text ) then // se o componente na posição [I] for um Edit e for de vazio
begin
Recebe_combo := (TEdit(Components[i])).Text;
DataModule1.Sua_tabela.Open;
DataModule1.Sua_tabela.insert;
DataModule1.Sua_tabela.FieldByName(Campo_da_sua_tabela).AsInteger := Recebe_combo;
DataModule1.Sua_tabela.Post;
end;
end;
var
I: Integer;
Recebe_combo: string;
begin
for i := 0 to Pred(ComponentCount) do // usado para varrer os componenentes do tipo Edit
if (Components[i] is TEdit) and (TEdit(Components[i]).Text ) then // se o componente na posição [I] for um Edit e for de vazio
begin
Recebe_combo := (TEdit(Components[i])).Text;
DataModule1.Sua_tabela.Open;
DataModule1.Sua_tabela.insert;
DataModule1.Sua_tabela.FieldByName(Campo_da_sua_tabela).AsInteger := Recebe_combo;
DataModule1.Sua_tabela.Post;
end;
end;
GOSTEI 0