Alinhar GET numérico à DIREITA

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

alaminojunior escreveu:Este getcalc que mencionei, vem junto com o livro do Rick Spence.
A biblioteca PTools tem algo assim. Funciona muito bem. Mas não tenho essa função. Tive que fazer a minha.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Iwasa
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 16 Ago 2007 08:27
Localização: PRES. PRUDENTE SP
Contato:

Mensagem por Iwasa »

Editado pela última vez por Iwasa em 16 Ago 2007 13:31, em um total de 4 vezes.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

MARCELOG escreveu:Jânio disse:

"Olá Daniel,

Esse getsys.prg funciona também com xharbour??? Se não, como fazer essa adaptação para que funcione???

Preciso muito disso...

Jânio"

Basta usar o Style ES_RIGHT

MarceloG
Olá Marcelo,

Nunca ouvi falar nesse 'Style ES_RIGTH'. Como se usa isso no xharbour???

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
João Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 19 Out 2007 11:24
Localização: Manduri - SP
Contato:

Mensagem por João Luiz »

Olá.. Eolo

Gostaria de saber se vc conseguiu fazer com que a gets numericas fosse gigitadas da direita para a esquerda e se vc poderia me ajudar com esta função.. obrigado
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem por alaminojunior »

Desculpem a pequena demora, mas ta aí a danada ( a rotina e o header ), foi o Rick Spence quem escreveu.

Código: Selecionar todos

/***
* GetCalc.prg
*
* Calculator style input
*/

#include "Getexit.ch"
#include "Inkey.ch"
#include "Getcalc.ch"

FUNCTION GetCalcTest

LOCAL nVar1 := 0,  ;
      nVar2 := 0,  ;
      cVar2 := Space(12), ;
      nVar3 := 0

LOCAL GetList := {}

  CLEAR SCREEN
  @ 10, 10 SAY "Enter nVar1" GET nVar1 CALC
  @ 11, 10 SAY "Enter nVar2" GET nVar2 CALC
  @ 12, 10 SAY "Enter cVar2" GET cVar2 CALC
  @ 13, 10 SAY "Enter nVar3" GET nVar3

  READ

RETURN NIL


proc GetCalc( oGet )

  // read the GET if the WHEN condition is satisfied
  IF ( GetPreValidate(oGet) )
    // activate the GET for reading
    oGet:SetFocus()

    // RS added this
    // Start at last position
    oGet:end()
    // Just to here

    DO WHILE ( oGet:exitState == GE_NOEXIT )
      // check for initial typeout (no editable positions)
      IF ( oGet:typeOut )
        oGet:exitState := GE_ENTER
      ENDIF

      // apply keystrokes until exit
      DO WHILE ( oGet:exitState == GE_NOEXIT )
        GetCalcApplyKey(oGet, InKey(0))
      ENDDO

      // disallow exit if the VALID condition is not satisfied
      IF ( !GetPostValidate(oGet) )
        oGet:exitState := GE_NOEXIT
      ENDIF
    ENDDO
    // de-activate the GET
    oGet:KillFocus()
  ENDIF

RETURN


/***
* GetCalcApplyKey()
* Apply a single Inkey() keystroke to a GET.
*
* NOTE: GET must have focus.
* Standard stuff. RS changed only BS and otherwise
*/

#define K_UNDO          K_CTRL_U

proc GetCalcApplyKey(oGet, nKey)

local cKey
local bKeyBlock
local cTemp
local nTemp

  // check for SET KEY first
  IF (bKeyBlock := SetKey(nKey)) <> NIL
    GetDoSetKey(bKeyBlock, oGet)
    RETURN                              // NOTE
  ENDIF

  DO CASE
    CASE nKey == K_UP
      oGet:exitState := GE_UP

    CASE nKey == K_SH_TAB
      oGet:exitState := GE_UP

    CASE nKey == K_DOWN
      oGet:exitState := GE_DOWN

    CASE nKey == K_TAB
      oGet:exitState := GE_DOWN

    CASE nKey == K_ENTER
      oGet:exitState := GE_ENTER

    CASE nKey == K_ESC
      IF Set(_SET_ESCAPE)
        oGet:undo()
        oGet:exitState := GE_ESCAPE
      ENDIF

    CASE nKey == K_PGUP
      oGet:exitState := GE_WRITE

    CASE nKey == K_PGDN
      oGet:exitState := GE_WRITE

    CASE nKey == K_CTRL_HOME
      oGet:exitState := GE_TOP

    // both ^W and ^End terminate the READ (the default)
    CASE nKey == K_CTRL_W
      oGet:exitState := GE_WRITE

    CASE nKey == K_UNDO
      oGet:Undo()

    CASE nKey == K_BS .OR. nKey == K_DEL
      oGet:delete()
      IF oGet:type == "C"
        cTemp := oGet:unTransform()
        cTemp := " " + Substr(cTemp, 1, Len(cTemp) - 1)
        oGet:buffer := Transform(cTemp, oGet:picture)
      ELSE
        nTemp := oGet:unTransform()
        IF At(".", oGet:buffer) != 0
          // There is a decimal point
          nTemp := nTemp / 10
        ELSE
          // No decimal point, division already taken place
          // by deleting last character
        ENDIF
        oGet:buffer := Transform(nTemp, oGet:picture)
      ENDIF
      oGet:display()

    OTHERWISE
      IF (nKey >= Asc('0') .AND. nKey <= Asc('9')) .OR. ;
          (nKey == Asc('.') .AND. ;
           oGet:type == "C" .AND. At(".", oGet:buffer) == 0)

        cKey := Chr(nKey)
        IF oGet:type == "C"
          cTemp := oGet:unTransform()
          cTemp := SubStr(cTemp, 2) + " "
          oGet:buffer := Transform(cTemp, oGet:picture)
        ELSE
          nTemp := oGet:unTransform()
          nTemp := nTemp * 10
          oGet:buffer := Transform(nTemp, oGet:picture)
        ENDIF
        // NOTE - important to use OverStrike here to set changed
        // Alternative is to stuff key yourself. However, that does
        // not set changed, therefore var is not updated.
        oGet:overStrike(cKey)
        oGet:end()
        oGet:display()
    ENDIF
  ENDCASE

RETURN

Código: Selecionar todos

/***
* Getcalc.ch
*
* Definition of GET CALCULATOR command.
*/

#command @ <row>, <col> GET <var>                             ;
                        [<clauses,...>]                       ;
                        CALCULATOR                            ;
                        [<moreClauses,...>]                   ;
                                                              ;
      => @ <row>, <col> GET <var>                             ;
                        [<clauses>]                           ;
                        SEND reader := {|oGet|                ;
                                        GetCalc(oGet) }       ;
                        [<moreClauses>]
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem por clodoaldomonteiro »

Alamino!

Também estou interessado em alterar a direção dos get numéricos e testei a sua função mais tive os seguintes problemas:

- Não aceitou a mascara @E;
- Quando enche o campo o foco deveria saltar para o próxomo campo e no entando, inicialmente o tamanho do get é aumentado e depois é colocado asteriscos "*".

Você conseguiu corrigir esses erros?
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem por clodoaldomonteiro »

Olá amigos!

Meu getsys foi alterado pela GAS, e usei as informações deste post (colocadas pelo Daniel) para implementar esse getsys e colocar a opção de get numérico rolando da direita para a esquerda e ficou muito bom mesmo.

Havia um tempo que queria fazer isso e graças a todos vocês tá tudo rodando perfeitamente.

Um agradecimento especial ao Daniel que colocou os códigos do getsys modificado aqui, valeu mesmo.

Agora vou postar o getsys do GAS com as alterações no forum da Gas Informática, para que todos os usuários GAS possam usufruir dessa modificação.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

Mensagem por juniorcamilo »

Ola amigos. eu testei o getsys do Daniel em meu sistema funcionou muito bem, so por um fato, em um certo get meu na tela de venda eu pesso para digitar o valor pago para mostrar o Troco, ai c por acaso na relacao de itens tiveres varios itens com quantidade 3 casas decimais * preço de venda 2 casas decimas e ainda desconto de porcentagem da uma dizima que a funcao nao compreende nao tive tempo de estudar este caso mas vi acontecer.. o valor pago no cujo get é recebindo com dizima e mostrado com 2 casas decimais, mas quando Teclo ENTER parece que ele no 'validade' acha que eu estou digitando valor menor que o total da venda ai ele diz total pago nao deve ser menor que a da venda.. Boiei mesmo....rsrsr
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Daniel escreveu:
janio escreveu:
Olá Daniel,

Esse getsys.prg funciona também com xharbour??? Se não, como fazer essa adaptação para que funcione???

Preciso muito disso...

Jânio
Ola Jânio

Ela funciona em xHarbour sem ter que mexer em nada.
Daniel,

Essa função nao tá funcionando com Pict "@R" em variaveis NUMERICAS. Em variáveis CARACTER tá ok.

Exemplo:

Com pict "@R 99999-9", o numero 123456 fica 1234-6

Como consertar??

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Mensagem por Daniel »

Jânio

eu testei aqui não achei erro. vc pode esta declarando a variavel com tamanho menor.
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Daniel escreveu:Jânio
vc pode esta declarando a variavel com tamanho menor.
Tamanho menor??? Não entendi. Variávies NUMERICAS se inicia com ZERO sem especificar tamanho, tipo nVARIAVEL := 0.

É o que eu faço.

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Mensagem por Daniel »

Jânio

testei aqui como vc falou, mais so deu erro quando usa ponto decimal. este erro tambem deu em clipper sem esta funcao.

usei este exemplo para testar
Cls
x:= Space(6)
x1:= Space(8)
x2:= 0
@ 8, 12 Say "Teste" Get x Picture "@r 99999-9"
@ 10, 12 say "Teste" Get x1
@ 12, 12 say "Teste" Get x2 Picture "9999999"
Read
@ 14, 12 say x
@ 16, 12 say x1 Picture "@R 999999-99"
@ 18, 12 say x2 Picture "@R 99999-99"
inkey(0)
aqui deu certo

Cls
x:= Space(6)
x1:= Space(8)
x2:= 0
@ 8, 12 Say "Teste" Get x Picture "@r 99999-9"
@ 10, 12 say "Teste" Get x1
@ 12, 12 say "Teste" Get x2 Picture "@e 99,999.99"
Read
@ 14, 12 say x
@ 16, 12 say x1 Picture "@R 999999-99"
@ 18, 12 say x2 Picture "@R 9999-99"
inkey(0)
aqui deu erro como vc falou
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Daniel escreveu:Jânio

usei este exemplo para testar
Cls
x:= Space(6)
x1:= Space(8)
x2:= 0
@ 12, 12 say "Teste" Get x2 Picture "9999999"
Read
@ 18, 12 say x2 Picture "@R 99999-99"
inkey(0)
aqui deu certo

x2:= 0
@ 12, 12 say "Teste" Get x2 Picture "@e 99,999.99"
Read
@ 18, 12 say x2 Picture "@R 9999-99"
inkey(0)
Colega Daniel,

Veja no seu exemplo que vc 'getou' PICT "9999999" e "@e 99,999.99" na variável x2 (única numérica).

Não é este o meu caso! O meu problema estar em getar variáveis numéricas com PICT "@R". PICT "@R" em variáveis CARACTER tá ok aqui também.

Faça o teste assim:
x2:= 0
@ 12, 12 say "Teste" Get x2 Picture "@R 999999-9"
Read

Digite: 123456 e pressione <ENTER>. Vc vai ver que ficou assim: 1234-6, ou seja, 'comeu' o 5.

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
TerraSoftware
Usuário Nível 3
Usuário Nível 3
Mensagens: 353
Registrado em: 28 Jul 2004 13:14
Localização: Cianorte-PR
Contato:

Mensagem por TerraSoftware »

Alguem sabe como isolar no codigo fonte do daniel somente o algoritimo responsável pelo get numérico?

Outra coisa: usando o fonte em questão a tecla Backspace naum funcionou nos get´s numéricos com decimais. Alguem pode me ajudar com relacao a isso?
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
diogenes_varela
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 04 Nov 2006 19:33
Localização: Brasília - DF

Mensagem por diogenes_varela »

Digite: 123456 e pressione <ENTER>. Vc vai ver que ficou assim: 1234-6, ou seja, 'comeu' o 5.
Comigo saiu tudo normal: 12345-6
Os computadores não sabem o que fazem. Nós, na maioria das vezes, também não...

E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
Responder