Página 1 de 1
Atribuir valor para a variável quando ela receber foco
Enviado: 17 Mai 2009 21:05
por labaroazul
Olá, amigos!
Tenho o seguinte código:
Código: Selecionar todos
@ 20,01 SAY "CUSTO:" GET nCUSTO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W"
@ 20,21 SAY "% ACRESCIMO:" GET nACRESCIMO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W"
@ 21,01 SAY "PRECO:" GET nPRECO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W"
Gostaria de saber como, assim que o get da variável nPRECO receber foco, seu valor seja calculado usando a seguinte fórmula nPRECO = nCUSTO + ((nCUSTO / 100) * nACRESCIMO).
Eu poderia usar um READ após o get do nACRESCIMO, da seguinte forma:
Código: Selecionar todos
@ 20,01 SAY "CUSTO:" GET nCUSTO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W"
@ 20,21 SAY "% ACRESCIMO:" GET nACRESCIMO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W"
READ
nPRECO = ROUND(nCUSTO + ((nCUSTO / 100) * nACRESCIMO),2)
@ 21,01 SAY "PRECO:" GET nPRECO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W"
Só que isso impediria o usuário de retornar aos gets anteriores e fazer alterações, caso quisesse.
Alguém tem alguma idéia?
Re: Atribuir valor para a variável quando ela receber foco
Enviado: 17 Mai 2009 21:27
por sygecom
labaroazul escreveu:
Gostaria de saber como, assim que o get da variável nPRECO receber foco, seu valor seja calculado usando a seguinte fórmula nPRECO = nCUSTO + ((nCUSTO / 100) * nACRESCIMO).
Pode fazer assim:
Código: Selecionar todos
@ 20,01 SAY "CUSTO:" GET nCUSTO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W"
@ 20,21 SAY "% ACRESCIMO:" GET nACRESCIMO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W" when calc_acres()
@ 21,01 SAY "PRECO:" GET nPRECO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W"
Function calc_acres
nPRECO = ROUND(nCUSTO + ((nCUSTO / 100) * nACRESCIMO),2)
Return(.t.)
Atribuir valor para a variável quando ela receber foco
Enviado: 18 Mai 2009 09:34
por Pablo César
Melhorando um pouquinho a idéia...
Eu aconselho a colocar a função prevalidadora "calc_acres()" do Leonardo e que foi aplicada através do WHEN em todas as edições de variáveis incidentes e ainda colocaria um SAY para dar a sensação que atualiza a variável em tempo real quando o usuário for navegar entre os gets.
Código: Selecionar todos
nCusto:=0.00
nAcrescimo:=0.00
nPreco:=0.00
cVar:=space(20)
@ 20,01 SAY "CUSTO:" GET nCUSTO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W" when calc_acres()
@ 20,21 SAY "% ACRESCIMO:" GET nACRESCIMO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W" when calc_acres()
@ 21,01 SAY "PRECO:" GET nPRECO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W" when calc_acres()
@ 22,01 SAY "Outro GET" GET cVar PIC "@!"
READ
Function calc_acres
nPRECO = ROUND(nCUSTO + ((nCUSTO / 100) * nACRESCIMO),2)
@ 21,07 say nPreco COLOR "W+/N,N/W"
Return(.t.)
Re: Atribuir valor para a variável quando ela receber foco
Enviado: 18 Mai 2009 12:55
por Adalberto
e asim?
Código: Selecionar todos
nCusto:= nAcrescimo:= nPreco:=0.00
cVar :=space(20)
//
@ 20,01 SAY "CUSTO:" GET nCUSTO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W" when calc_acres()
@ 20,21 SAY "% ACRESCIMO:" GET nACRESCIMO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W" ;
VALID CtrlAcrescimo( nAcrescimo , 21 , 07 )
@ 21,01 SAY "PRECO:" GET nPRECO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W"
@ 22,01 SAY "Outro GET" GET cVar PIC "@!"
READ
//
STATIC FUNCTION CtrlAcrescimo( nAcrescimo , nRow , nCol )
//
IF ( LASTKEY() = 5 )
RETURN .T.
ENDIF
IF EMPTY( nAcrescimo )
* Mensagem
RETURN .F.
ENDIF
nAcrescimo := ABS( nAcrescimo )
nPRECO = ROUND(nCUSTO + ((nCUSTO / 100) * nAcrescimo ),2)
@ nRow,nCol say nPreco COLOR "W+/N,N/W"
RETURN .T.
Um grande abraço a todos voces.
Re: Atribuir valor para a variável quando ela receber foco
Enviado: 18 Mai 2009 13:32
por anacatacombs
Boa tarde.
Adalberto ... desse modo, fica obrigatório o preenchimento do campo acréscimo
não sei se é essa a idéia da função, mas eu acho (EU, Ana..) que esse campo não precisa necessariamente ser preenchido.
Eu também teria passado a variável nPreco como parametro...
Mas é uma forma válida.
[]'s
Ana
Re: Atribuir valor para a variável quando ela receber foco
Enviado: 18 Mai 2009 14:10
por sygecom
Outra coisa, o VALID só vai executar quando o GET perder o focu, e o colega postou que queria quando o GET receber o FOCU. Então tem que ser pelo WHEN.
Re: Atribuir valor para a variável quando ela receber foco
Enviado: 18 Mai 2009 14:19
por anacatacombs
Bem lembrado Leo, no entanto, tem essa parte do código (...)
Código: Selecionar todos
nPRECO = ROUND(nCUSTO + ((nCUSTO / 100) * nAcrescimo ),2)
@ nRow,nCol say nPreco COLOR "W+/N,N/W"
RETURN .T.
(...) que pelo que eu entendi, a idéia era mudar o valor da variavel nPreco, e mostrar em seguida, o que superficialmente(visualmente, teoricamente ou primeiramente) daria o mesmo resultado do WHEN.
[]'s
Ana
Re: Atribuir valor para a variável quando ela receber foco
Enviado: 18 Mai 2009 21:53
por Adalberto
Ana.
Não é obrigatório o preenchimento do campo acréscimo, só e tirar a condição, minha intenção era mostrar a possibilidade de fazer essa operação com VALID, acho que da certo.
Leonardo
Veja que o valid esta no GET de acréscimo, então quando acréscimo perder o foco já tem mostrado o preço é só então o foco passa a nPreco
Boa noite a ambos, Deus os abençoe
Re: Atribuir valor para a variável quando ela receber foco
Enviado: 19 Mai 2009 08:24
por anacatacombs
Adalberto.
Como eu disse anteriormente, é uma forma válida, eu teria feito da seguinte forma:
Código: Selecionar todos
nCusto:= nAcrescimo:= nPreco:=0.00
cVar :=space(20)
@ 20,01 SAY "CUSTO:" GET nCUSTO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W"
@ 20,21 SAY "% ACRESCIMO:" GET nACRESCIMO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W" VALID CtrlAcrescimo( nAcrescimo,21,07,@nPreco,nCusto)
@ 21,01 SAY "PRECO:" GET nPRECO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W"
@ 22,01 SAY "Outro GET" GET cVar PIC "@!"
READ
STATIC FUNCTION CtrlAcrescimo( Acrescimo , nRow , nCol,preco,custo )
IF !EMPTY(acrescimo) .and. LASTKEY()#5
Acrescimo := ABS( Acrescimo )
PRECO := ROUND(CUSTO + ((CUSTO / 100) * Acrescimo ),2)
@ nRow,nCol say Preco COLOR "W+/N,N/W"
ENDIF
RETURN .T.
Acho que tanto faz colocar no VALID do nacrescimo ou no WHEN do nPreco.. e dessa forma a função pode ser reutilizada em outras rotinas.
[]'s
Ana
Re: Atribuir valor para a variável quando ela receber foco
Enviado: 19 Mai 2009 19:37
por alxsts
Olá Amigos!
Uma forma que tambem funciona e economiza uma função no programa é como abaixo:
Código: Selecionar todos
nCusto:=0.00
nAcrescimo:=0.00
nPreco:=0.00
cVar:=space(20)
@ 20,01 SAY "CUSTO:" GET nCUSTO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W" when calc_acres()
@ 20,21 SAY "% ACRESCIMO:" GET nACRESCIMO PICTURE "@E 999999999.99" SEND COLORSPEC := "W+/N,N/W" when calc_acres()
@ 21,01 SAY "PRECO:" ;
GET nPRECO ;
PICTURE "@E 999999999.99" ;
SEND COLORSPEC := "W+/N,N/W" ;
WHEN ValType( (nPRECO := ROUND(nCUSTO + ((nCUSTO / 100) * nACRESCIMO),2) ) ) == "N"
@ 22,01 SAY "Outro GET" GET cVar PIC "@!"
READ
[]'s
AlxSts
Re: Atribuir valor para a variável quando ela receber foco
Enviado: 20 Mai 2009 14:17
por sygecom
Olá Adalberto,
Desculpa eu nem tinha percebido onde estava o VALID.
Bom, pelo menos exemplo de uso não faltou, acredito que o colega já deve ter conseguido resolver sua duvida.
Re: Atribuir valor para a variável quando ela receber foco
Enviado: 24 Mai 2009 14:10
por labaroazul
Boa tarde, amigos!
Colocando uma função para cálculo com Valid() nos gets nCUSTO e nACRESCIMO meu problema foi resolvido. Tive de declarar as variáveis nCUSTO, nACRESCIMO e nPRECO como PUBLIC, no início do PRG, também.
A intensão é a de propiciar ao usuário o cálculo do preço de venda que ele pode alterar quando o campo nPRECO receber foco - e deu certo.
Desculpem a demora para enviar uma resposta... Andei um pouco ocupado ultimamente!
Valeu! :{