Clipper On Line • Ver Tópico - Janela temporaria

Janela temporaria

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Janela temporaria

Mensagempor gilbertosilverio » 21 Jul 2017 08:47

Ola amigos,

Preciso montar aqui na farmácia, uma rotina para mostrar o preço e os dados de um produto quando o cliente passar o código de barras em um leitor.

A principio ate monte uma tela de pesquisa, mais ela fica ativa com os dados ate nova pesquisa, mais gostaria que ela ficasse ativa somente por um pequeno período.

Alguém teia um pequeno exemplo de como posso fazer isso. :% :%

Grato.
gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Janela temporaria

Mensagempor Toledo » 21 Jul 2017 09:02

Amigo, você tem um código de exemplo desta tela de pesquisa que você fez?

Com um exemplo vai ficar mais fácil lhe ajudar.

Abraços
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Janela temporaria

Mensagempor gilbertosilverio » 21 Jul 2017 10:12

Bom dia Toledo,

A grosso modo seria isso, tenho a rotina em modo caractere, mais na HWGUI bato cabeça...

Quero fazer a pesquisa pelo codigo EAN, retornar os dados do produto, esperar um tempo e limpar a tela para uma nova pesquisa.

FUNCTION PESQUISA_PRECO()
   PRIVATE oDLG, oBUTTON1, oEDIT1, cEDIT1:=SPAC(13), oLABEL1, oLABEL2, nVLRMARCA:=0
   DBCLOSEALL()

   DBUSEAREA(.T., "DBFNTX", [xESTOQUE] , [xESTOQUE], .T.)
   SET INDEX TO xESTEAN

   INIT DIALOG oDlg TITLE "Preco do item"  AT 0, 0 SIZE 1092,630 NOEXIT CLIPPER COLOR x_WHITE ;
        FONT HFont():Add( 'Verdana',0,-13,400,,,)                                     ;
        STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+DS_CENTER ;
        ON EXIT {||Fileclose()}

        This_VISU := oDlg

        @  19,2 GROUPBOX oGroup1 CAPTION ""  SIZE 1047,123  STYLE BS_LEFT

        @  28,11 SAY oLabel1 CAPTION "Codigo EAN"  SIZE 60,21 COLOR 4227072 TRANSPARENT

        @  28,32 GET oEdit1 VAR cEdit1 SIZE 200,26 PICTURE '9999999999999' ;
                 VALID {|| PESQUISA_VALOR() }

        @  28,200 SAY oLabel2 CAPTION [Valor do item: ]+STR(nVLRMARCA,12,2) SIZE 400,24 COLOR 4227072 TRANSPARENT

   ACTIVATE DIALOG oDlg

RETURN NIL

FUNCTION PESQUISA_VALOR()
      LOCAL xEAN:= TRANS(cEDIT1, [@R 999.99999.9999-9])
      xESTOQUE->(DBSEEK(xEAN, .F.))

      IF xESTOQUE->(FOUND())
         nVLRMARCA:=xESTOQUE->TABELA02
         This_VISU:oLABEL2:SETTEXT([Valor do item: ] + STR(nVLRMARCA,12,2))
         This_VISU:oLABEL2:REFRESH()
         cEDIT:=SPAC(13)
         This_Visu:oEdit1:REFRESH()
         This_Visu:oEdit1:setfocus()
      ELSE
         cEDIT:=SPAC(13)
         This_Visu:oEdit1:REFRESH()
         This_Visu:oEdit1:setfocus()
      ENDIF
RETURN .T.

gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Janela temporaria

Mensagempor gilbertosilverio » 21 Jul 2017 17:09

Ola,

Consegui fazer mais ou menos o que preciso, mais ficou um código tão ruim que tenho ate vergonha de mostrar... rsrsrsr

Do jeito que esta, ate da pra usar, o único senão e se o usuário bipar outro item antes de encerrar o tempo de espera para recriar a janela, creio que existe algo mais pratico e mais fácil do que fiz, agradeço qualquer dica...

Não consigo entender o por que, de na validação do GET, ele não permanecer dentro da função que estou chamando, a PESQUISA_VALOR(), tentei de todas as maneiras parar a execução da rotina ai dentro, "PARAR AQUI", mais ele simplesmente sai.

FUNCTION PESQUISA_PRECO()
   PRIVATE oDLGTEL, oBUTTON1, oET1, cET1:=SPAC(13), nVLRMARCA:=0, oGroup1
   PRIVATE oET2, cET2:=SPAC(13), oLEL1, oLEL2, oLEL3, oLEL4

   INIT DIALOG oDlgTEL TITLE "Preco do item"  AT 0, 0 SIZE 1092,630 NOEXIT COLOR x_WHITE         ;
        FONT HFont():Add( 'Verdana',0,-13,400,,,) STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+DS_CENTER ;
        ON EXIT {||Fileclose()}

        @  19,2 GROUPBOX oGroup1 CAPTION ""  SIZE 1047,123  STYLE BS_LEFT

        @  28,11 SAY oLel1 CAPTION "Codigo EAN"  SIZE 120,21 COLOR 4227072 TRANSPARENT
        @  28,35 GET oEt1 VAR cEt1 SIZE 200,26 PICTURE '9999999999999' VALID {|| IF(!EMPTY(cET1), ( PESQUISA_VALOR(), INKEY(2), oDLGTEL:CLOSE(), LIMPA() ), .T. )  }
        @  28,35 GET oEt2 VAR cEt2 SIZE 200,26

        @  19,125 GROUPBOX oGroup1 CAPTION ""  SIZE 1047,130  STYLE BS_LEFT

        @  28,140 SAY oLel2 CAPTION [Descrição: ] SIZE 800,24                     ;
                  COLOR 4227072 TRANSPARENT FONT HFont():Add( 'Verdana',0,-20,400,,,)

        @  28,180 SAY oLel3 CAPTION [De : ] SIZE 800,24                     ;
                  COLOR 4227072 TRANSPARENT FONT HFont():Add( 'Verdana',0,-20,400,,,)

        @  28,220 SAY oLel4 CAPTION [Por: ] SIZE 800,24                     ;
                  COLOR 4227072 TRANSPARENT FONT HFont():Add( 'Verdana',0,-20,400,,,)

   ACTIVATE DIALOG oDlgTEL
RETURN NIL

FUNCTION PESQUISA_VALOR()
   LOCAL xEAN:= TRANS(cET1, [@R 999.99999.9999-9])
   DBCLOSEALL()
   DBUSEAREA(.T., "DBFNTX", [xESTOQUE] , [xESTOQUE], .T.)
   SET INDEX TO xESTEAN
   xESTOQUE->(DBSEEK(xEAN, .F.))
   IF xESTOQUE->(FOUND())
      nVLRMARCA:=xESTOQUE->TABELA02 ; xPMC:=xESTOQUE->PRECOMC ; xDESCRI  :=DESCRICAO

      oLEL2:SETTEXT([Descricão: ]+xDESCRI )
      oLEL2:REFRESH()

      oLEL3:SETTEXT([De : ]+STR(xPMC,12,2) )
      oLEL3:REFRESH()

      oLEL4:SETTEXT([Por: ]+STR(nVLRMARCA,12,2) )
      oLEL4:REFRESH()

      cET1:=SPAC(13)
      oEt1:Value := SPAC(13)
      oEt1:REFRESH()
      oEt1:setfocus()
   ELSE
      cET1:=SPAC(13)
      oEt1:Value := SPAC(13)
      oEt1:REFRESH()
      oEt1:setfocus()
   ENDIF
   DBCLOSEALL()
   hwg_msginfo([Parar aqui])
RETURN .T.

Function FileClose()
   DBCloseArea()
   DBCLOSEALL()
Return .T.

FUNCTION LIMPA()
   PRIVATE oDLGTEL, oBUTTON1, oET1, cET1:=SPAC(13), nVLRMARCA:=0, oGroup1
   PRIVATE oET2, cET2:=SPAC(13), oLEL1, oLEL2, oLEL3, oLEL4

   INIT DIALOG oDlgTEL TITLE "Preco do item"  AT 0, 0 SIZE 1092,630 NOEXIT COLOR x_WHITE         ;
        FONT HFont():Add( 'Verdana',0,-13,400,,,) STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+DS_CENTER ;
        ON EXIT {||Fileclose()}

        @  19,2 GROUPBOX oGroup1 CAPTION ""  SIZE 1047,123  STYLE BS_LEFT

        @  28,11 SAY oLel1 CAPTION "Codigo EAN"  SIZE 120,21 COLOR 4227072 TRANSPARENT
        @  28,35 GET oEt1 VAR cEt1 SIZE 200,26 PICTURE '9999999999999' VALID {|| IF(!EMPTY(cET1), ( PESQUISA_VALOR(), INKEY(2), oDLGTEL:CLOSE(), LIMPA() ), .T. )  }
        @  28,35 GET oEt2 VAR cEt2 SIZE 200,26

        @  19,125 GROUPBOX oGroup1 CAPTION ""  SIZE 1047,130  STYLE BS_LEFT

        @  28,140 SAY oLel2 CAPTION [Descrição: ] SIZE 800,24                     ;
                  COLOR 4227072 TRANSPARENT FONT HFont():Add( 'Verdana',0,-20,400,,,)

        @  28,180 SAY oLel3 CAPTION [De : ] SIZE 800,24                     ;
                  COLOR 4227072 TRANSPARENT FONT HFont():Add( 'Verdana',0,-20,400,,,)

        @  28,220 SAY oLel4 CAPTION [Por: ] SIZE 800,24                     ;
                  COLOR 4227072 TRANSPARENT FONT HFont():Add( 'Verdana',0,-20,400,,,)

   ACTIVATE DIALOG oDlgTEL

RETURN .T.
gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Janela temporaria

Mensagempor Toledo » 21 Jul 2017 20:25

Faz um teste com este código. Para ver as alterações que eu fiz, procure por //*** alteracao toledo ***.

FUNCTION PESQUISA_PRECO()
   PRIVATE oDLGTEL, oBUTTON1, oET1, cET1:=SPAC(13), nVLRMARCA:=0, oGroup1
   PRIVATE oET2, cET2:=SPAC(13), oLEL1, oLEL2, oLEL3, oLEL4
   PRIVATE lTimerAtivo:=.F.,oTmpPes  //*** alteracao toledo ****

   INIT DIALOG oDlgTEL TITLE "Preco do item"  AT 0, 0 SIZE 1092,630 NOEXIT COLOR x_WHITE         ;
        FONT HFont():Add( 'Verdana',0,-13,400,,,) STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+DS_CENTER ;
        ON EXIT {||Fileclose()}

        @  19,2 GROUPBOX oGroup1 CAPTION ""  SIZE 1047,123  STYLE BS_LEFT

        @  28,11 SAY oLel1 CAPTION "Codigo EAN"  SIZE 120,21 COLOR 4227072 TRANSPARENT
        @  28,35 GET oEt1 VAR cEt1 SIZE 200,26 PICTURE '9999999999999' VALID {|| IF(!EMPTY(cET1), PESQUISA_VALOR(), .T. )  } //*** alteracao toledo ****
        @  28,35 GET oEt2 VAR cEt2 SIZE 200,26

        @  19,125 GROUPBOX oGroup1 CAPTION ""  SIZE 1047,130  STYLE BS_LEFT

        @  28,140 SAY oLel2 CAPTION [Descrição: ] SIZE 800,24                     ;
                  COLOR 4227072 FONT HFont():Add( 'Verdana',0,-20,400,,,)  //*** alteracao toledo **** tirei TRANSPARENT

        @  28,180 SAY oLel3 CAPTION [De : ] SIZE 800,24                     ;
                  COLOR 4227072 FONT HFont():Add( 'Verdana',0,-20,400,,,)  //*** alteracao toledo ****

        @  28,220 SAY oLel4 CAPTION [Por: ] SIZE 800,24                     ;
                  COLOR 4227072 FONT HFont():Add( 'Verdana',0,-20,400,,,)  //*** alteracao toledo ****

   ACTIVATE DIALOG oDlgTEL
RETURN NIL

FUNCTION PESQUISA_VALOR()
   LOCAL xEAN:= TRANS(cET1, [@R 999.99999.9999-9])
   DBCLOSEALL()
   DBUSEAREA(.T., "DBFNTX", [xESTOQUE] , [xESTOQUE], .T.)
   SET INDEX TO xESTEAN
   xESTOQUE->(DBSEEK(xEAN, .F.))
   IF xESTOQUE->(FOUND())
      nVLRMARCA:=xESTOQUE->TABELA02 ; xPMC:=xESTOQUE->PRECOMC ; xDESCRI  :=DESCRICAO

      oLEL2:SETTEXT([Descricão: ]+xDESCRI )
      oLEL2:REFRESH()

      oLEL3:SETTEXT([De : ]+STR(xPMC,12,2) )
      oLEL3:REFRESH()

      oLEL4:SETTEXT([Por: ]+STR(nVLRMARCA,12,2) )
      oLEL4:REFRESH()

      cET1:=SPAC(13)
      oEt1:Value := SPAC(13)
      oEt1:REFRESH()
      oEt1:setfocus()

      If !lTimerAtivo    //*** alteracao toledo **** inclui estas 6 linhas
        SET TIMER oTmpPes OF oDlgTEL ID 2345 VALUE 20000 ACTION {||Limpa()}  //seta 20 segundos
        lTimerAtivo:=.T.
      else
        SetTimer(oDlgTEL:handle,2345,20000)  //seta 20 segundos
      endif
   ELSE
      cET1:=SPAC(13)
      oEt1:Value := SPAC(13)
      oEt1:REFRESH()
      oEt1:setfocus()
   ENDIF
   DBCLOSEALL()
   hwg_msginfo([Parar aqui])
RETURN .T.

Function FileClose()
   DBCloseArea()
   DBCLOSEALL()
Return .T.

Function Limpa()   //*** alteracao toledo **** alterei toda a funcao
  oLEL2:SETTEXT([Descricão: ]+SPAC(100) )
  oLEL2:REFRESH()

  oLEL3:SETTEXT([De : ]+SPAC(100) )
  oLEL3:REFRESH()

  oLEL4:SETTEXT([Por: ]+SPAC(100) )
  oLEL4:REFRESH()

  SetTimer(oDlgTEL:handle,2345,360000)   //seta 6 minutos
Return .T.


Abraços
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Janela temporaria

Mensagempor gilbertosilverio » 21 Jul 2017 21:33

Toledo,

Muito obrigado, ficou perfeito.

:-Y :-Y :-Y
gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Janela temporaria

Mensagempor gilbertosilverio » 23 Jul 2017 12:30

Ola amigos,

Mais uma duvida:

Na rotina acima, quando bipo um item que tem o código EAN com 13 dígitos, ela funciona perfeitamente, mais tenho casos onde o produto não tem código EAN e uso o próprio código do sistema para verificar o preço.

Neste caso como faço pra validar o GET, somente usando um leitor de código de barras, quando o código for menor que 13 caracteres, no meu caso com 6 digitos.

Ja tentei de tudo e não consigo fazer funcionar.

Existe na HWGUI algum HWG_GetKeyState() para o leitor de codigo de barras, que mostre que e o final da leitora.

Grato.

   PRIVATE  oET1, cET1:=SPAC(13)

        @  28,11 SAY oLel1 CAPTION "Codigo EAN"  SIZE 120,21 COLOR 4227072

        @  28,35 GET oEt1 VAR cEt1 SIZE 200,26 PICTURE '9999999999999'  VALID {|| IF(!EMPTY(cET1), PESQUISA_VALOR(), .T. )  }

gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Janela temporaria

Mensagempor Itamar M. Lins Jr. » 27 Jul 2017 06:49

Ola!
Na leitora vc configura para teclar enter. Via manual da leitora, um livrinho cheios de códigos de barras.
Inclusive adicionar "@" no final da leitura do código, etc...
Coloque o get maior que 13 dígitos. cET1:=SPACE(20), por exemplo.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Janela temporaria

Mensagempor gilbertosilverio » 27 Jul 2017 07:25

Ola Itamar,

A rotina como o Toledo postou funciona perfeitamente para quando leio um codigo ean, o que ocorre e que tem produtos que não tem o EAN, ai uso uma etiqueta como um código interno de 6 dígitos, para esta pesquisa.

Ja coloquei uma cláusula WhEN na minha rotina pra tentar fazer o termino do leitor, ate funciona, mais tem horas que ele se perde...

Deixa quieto, tentei mudar para visual a tela que tenho em modo caracter, para deixar um pouco mais bonitinho, mais como não consigo enter como uma GUI funciona, vou deixar como esta mesmo... rsrsrsr

O minha lógica, velha, que estou acostumado, de ser linear, não se encaixa com as linguagem visuais, por exemplo nesta tela, onde so tenho um GET, tive que por outro GET em branco, somente para conseguir avançar, mesmo como o opção CLIPPER, para usar o ENTER ao inves do TAB, sem o segundo GET, ele o primeiro não e validado.

Como faço tudo por tentativa e erro, devido as minhas limitações, me baseio em exemplos que colho aqui no forum, mais como cada um tem sua logica, as vezes fica dificil de enter.

Agradeço sua atenção.
gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Janela temporaria

Mensagempor Itamar M. Lins Jr. » 27 Jul 2017 10:24

Ola!
Como eu disse, é mais fácil mudar para a leitora teclar enter no final (vem dessa forma de fábrica), alguém alterou a sua leitora para não teclar <enter> ai.

Se usar a leitora no "prompt" via "CMD" vai entender o que estou explicando.
Deverá aparecer o código da forma em anexo se o enter estiver ativo;

Saudações,
Itamar M. Lins Jr.
Anexos
tela_leitor.png
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Janela temporaria

Mensagempor Itamar M. Lins Jr. » 27 Jul 2017 10:44

Ola!
O minha lógica, velha, que estou acostumado, de ser linear, não se encaixa com as linguagem visuais, por exemplo nesta tela, onde so tenho um GET, tive que por outro GET em branco, somente para conseguir avançar, mesmo como o opção CLIPPER, para usar o ENTER ao inves do TAB, sem o segundo GET, ele o primeiro não e validado.


Isso é normal porque é validado pelo foco no "objeto" isso é do "OS", Sistema Operacional, felizmente ou infelizmente, sair do foco, é sair do get.
Mas na DIALOG o ultimo get não é validado "Hwgui 2.20", sua rotina só tem 1get. Ai usamos no ultimo get, mais um para validar, "GET fantasma", sem nada(vazio)! somente para validar o anterior.
Por isso as linguagens visuais tem "ON GETFOCUS", "ON LOSTFOCUS"..., que é a mesma coisa do clipper "WHEN" e "VALID" respectivamente.

#xcommand @ <x>,<y> GET [ <oEdit> VAR ]  <vari>  ;
...
            [ WHEN  <bGfocus> ]        ;
            [ VALID <bLfocus> ]        ;

E tem também mais esse; Que pode chamar uma função, na medida que pressionar uma tecla.
            [ ON KEYDOWN <bKeyDown>]   ;


Faça assim:
 @  28,35 GET oEt2 VAR cEt2 SIZE 200,26 
//mude para
@  28,35 GET oEt2 VAR cEt2 SIZE 0,0


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes




Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro