Selecao DevMedia QUERO SER PRIME

Fórum somando em tempo de execução #364937

12/10/2008

0

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

Responder

Posts

13/10/2008

Robinhocne

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!


Responder

Gostei + 0

13/10/2008

Eniorm

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


Responder

Gostei + 0

13/10/2008

Boavida

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


Responder

Gostei + 0

14/10/2008

Facc

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)


Responder

Gostei + 0

14/10/2008

Eniorm

então vamos ajustar....

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

// restante do código



Responder

Gostei + 0

15/10/2008

Diegotiemann

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;



Responder

Gostei + 0

16/10/2008

Boavida

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


Responder

Gostei + 0

16/10/2008

Emerson Nascimento

[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).


Responder

Gostei + 0

16/10/2008

Boavida

Amigão deu certo... muito obrigado


Responder

Gostei + 0

16/10/2008

Misterzire

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar