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

Código: Selecionar todos

IF EMPTY( nAcrescimo )
   * Mensagem
   RETURN .F.
ENDIF
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! :{