Atribuir valor para a variável quando ela receber foco

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

labaroazul
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 26 Fev 2008 14:52
Localização: São Paulo - SP
Contato:

Atribuir valor para a variável quando ela receber foco

Mensagem 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?
Windows XP Professional + Clipper 5.2e + Exospace + Dbase III Plus + SIX3 + NoDosImp + LXPic
"O trabalho afasta três males: o vício, a pobreza e o tédio." (Voltaire)
Site: http://www.labaroazul.xpg.com.br
Repositório: http://www.4shared.com/dir/31334106/e79 ... aring.html
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Atribuir valor para a variável quando ela receber foco

Mensagem 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.)
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Atribuir valor para a variável quando ela receber foco

Mensagem 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.)
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Re: Atribuir valor para a variável quando ela receber foco

Mensagem 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.
anacatacombs
Membro Master
Membro Master
Mensagens: 472
Registrado em: 12 Jul 2005 16:53
Localização: Cianorte-Paraná
Contato:

Re: Atribuir valor para a variável quando ela receber foco

Mensagem 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
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Atribuir valor para a variável quando ela receber foco

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
anacatacombs
Membro Master
Membro Master
Mensagens: 472
Registrado em: 12 Jul 2005 16:53
Localização: Cianorte-Paraná
Contato:

Re: Atribuir valor para a variável quando ela receber foco

Mensagem 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
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Re: Atribuir valor para a variável quando ela receber foco

Mensagem 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
anacatacombs
Membro Master
Membro Master
Mensagens: 472
Registrado em: 12 Jul 2005 16:53
Localização: Cianorte-Paraná
Contato:

Re: Atribuir valor para a variável quando ela receber foco

Mensagem 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
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Atribuir valor para a variável quando ela receber foco

Mensagem 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
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Atribuir valor para a variável quando ela receber foco

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
labaroazul
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 26 Fev 2008 14:52
Localização: São Paulo - SP
Contato:

Re: Atribuir valor para a variável quando ela receber foco

Mensagem 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! :{
Windows XP Professional + Clipper 5.2e + Exospace + Dbase III Plus + SIX3 + NoDosImp + LXPic
"O trabalho afasta três males: o vício, a pobreza e o tédio." (Voltaire)
Site: http://www.labaroazul.xpg.com.br
Repositório: http://www.4shared.com/dir/31334106/e79 ... aring.html
Responder