somando em tempo de execução

Delphi

12/10/2008

Tenho 21 DBEdit´s, dos quais 20 recebem valores digitados pelo usuário, (não é obrigado preencher todos) e o vigéssimo primeiro deve mostrar o resultado da soma logo após o usuário digitá-los (em tempo de execução). como faço isso?? (ex. igual aqueles sistemas de vendas quando é digitado a qtde de produtos o valor total é mostrado)?
A TODOS OBRIGADO.


Boavida

Boavida

Curtidas 0

Respostas

Robinhocne

Robinhocne

12/10/2008

dá para vc fazer essa soma no onexit do penultimo dbedit, pois assim que o usuario passar por ele ai vc coloca para o resultado aparecer no 21ª DbEdit.

ou no onenter do 21ªDbEdit para fazer a soma!


GOSTEI 0
Eniorm

Eniorm

12/10/2008

vamos supor que temos apenas 5 dbedits (para facilitar o código)

no evento OnExit do último eu implemento algo deste tipo

DBEdit5.Field.AsFloat := 
  DBEdit1.Field.AsFloat +
  DBEdit2.Field.AsFloat +
  DBEdit3.Field.AsFloat +
  DBEdit4.Field.AsFloat;


Com isso, ao ser disparado o evento OnExit do último dbedit (DBEdit5) será feito as somas....
E para melhorar, eu seleciono os 4 primeiros dbedits (1, 2, 3 e 4), e associo o evento OnExit de cada dbedit, com o evento OnExit do DBEdit5

assim, a implementação deste evento será refletida para todos os 5 dbedits

abraços


GOSTEI 0
Boavida

Boavida

12/10/2008

tudo bem, mas vamos considerar que nao é obrigatório o preenchimento de todos os DBEdit´s, esse seu código dará certo??


GOSTEI 0
Facc

Facc

12/10/2008

tudo bem, mas vamos considerar que nao é obrigatório o preenchimento de todos os DBEdit´s, esse seu código dará certo??


Realmente, se ele deixar algum Edit em branco vai dar erro de null is not a float value...

acredito que para isso terá que fazer uma verificação em todos os edits antes da soma, caso esteja em branco, jogar 0 (zero)


GOSTEI 0
Eniorm

Eniorm

12/10/2008

então vamos ajustar....

if ((Sender as TDBEdit).Field.IsNull) then
  (Sender as TDBEdit).Field.AsFloat := 0;

// restante do código



GOSTEI 0
Diegotiemann

Diegotiemann

12/10/2008

Eu faria assim:
var 
SOMA:Inteiro;;;considerando que aceite somente inteiros

begin

for I := 0 to ComponentCount - 1 do
   if Components[I] is TEdit then
     if TEdit(Components[I]).Text<>´´ then
         SOMA:=SOMA+StrToInt(TEdit(Components[I]).Text);
 
//ai é so atribuir o valor da várivel onde ocê quer
end;



GOSTEI 0
Boavida

Boavida

12/10/2008

Seu código parece legal, mas onde coloco ele? desde já obrigado


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

12/10/2008

[quote:d9383a009e=´Enio Marconcini´]vamos supor que temos apenas 5 dbedits (para facilitar o código)

no evento OnExit do último eu implemento algo deste tipo

DBEdit5.Field.AsFloat := 
  DBEdit1.Field.AsFloat +
  DBEdit2.Field.AsFloat +
  DBEdit3.Field.AsFloat +
  DBEdit4.Field.AsFloat;


Com isso, ao ser disparado o evento OnExit do último dbedit (DBEdit5) será feito as somas....
E para melhorar, eu seleciono os 4 primeiros dbedits (1, 2, 3 e 4), e associo o evento OnExit de cada dbedit, com o evento OnExit do DBEdit5

assim, a implementação deste evento será refletida para todos os 5 dbedits

abraços[/quote:d9383a009e]
essa é a melhor sugestão. e pode ficar tranquilo que não dará erro se algum campo estiver vazio, visto que o asFloat já resolve isso: se estiver vazio, retorna 0 (zero).


GOSTEI 0
Boavida

Boavida

12/10/2008

Amigão deu certo... muito obrigado


GOSTEI 0
Misterzire

Misterzire

12/10/2008

Tente Aggregates Fields . Que é um tipo de campo calculado que são utilizados para realizar calculos automaticos em tempo de execução .


GOSTEI 0
POSTAR