Clipper On Line • Ver Tópico - Textbox com Validação
Página 1 de 2

Textbox com Validação

MensagemEnviado: 12 Fev 2014 20:23
por pedrobsjunior
Pessoal boa noite, sou novato aqui e como muitos outros já desenvolvo em Clipper 5.3 durante muito tempo e tenho o objetivo de criar programas com um visual diferente. Já fui pro Visual Fox Pro, Delphi, VB, mas o que eu queria era algo que fosse de fácil utilização e encontrei o Harbour, estou utilizando o HMG Versão 3.2 e estou fazendo vários testes e uma coisa que eu conseguia fazer em clipper e que estou batendo cabeça é colocar um valid em um get. Estou tentando fazer a mesma coisa só que com um Textbox, onde gostaria de colocar um valid.

Gostaria da ajuda de vocês para solucionar a minha dúvida, se não for possível colocar em um textbox, pode ser uma outra solução.

A idéia é colocar um valid para saber se o campo ficou em branco e mandar uma mensagem paara o usuário informando que o campo não deve ser nulo, validar um campo numérico onde o valor não pode ser igual a zero, Digitar um conteúdo no textbox e validar se existe esse conteúdo digitado em uma tabela e retornar uma determinada informação, etc.

Coisas desse tipo que estou pesquisando na internet e não consigo encontrar algo que solucione a minha dúvida.

Abraços à todos.
Pedro Junior

Textbox com Validação

MensagemEnviado: 13 Fev 2014 08:18
por Toledo
Pedro, seja bem-vindo ao fórum!

Veja este exemplo:

#include "hmg.ch"

REQUEST HB_CODEPAGE_PTISO

Function Main

   HB_CDPSELECT("PTISO")
   SET LANGUAGE TO PORTUGUESE
   SET NAVIGATION EXTENDED

   CriarARQ()

   DEFINE WINDOW Form_1 ;
      AT 0,0 ;
      WIDTH 640 HEIGHT 480 ;
      TITLE 'Validação em TEXTBOX' ;
      MAIN

      @ 10,10 TEXTBOX Text_1 ;
         WIDTH 150 ;
         TOOLTIP 'Validar campo em branco/vazio' ;
         ON ENTER {|| Val_Vazio(This.Value) }

      @ 40,10 TEXTBOX Text_2 ;
         VALUE 0 ;
         TOOLTIP 'Validar valor maior que zero' ;
         NUMERIC ;
         MAXLENGTH 5 ;
         RIGHTALIGN ;
         ON ENTER {|| Val_Valor(This.Value) }

      @ 70,10 TEXTBOX Text_3 ;
         WIDTH 50 ;
         TOOLTIP 'Validar conteúdo em outro arquivo' ;
         INPUTMASK '9999' ;
         ON ENTER {|| Val_Campo(This.Value) }

      @ 73,70 LABEL Label_1 ;
         AUTOSIZE ;
         VALUE '' ;
         TRANSPARENT ;
         FONT "ARIAL" SIZE 12 BOLD

   END WINDOW

   Form_1.Center

   Form_1.Activate

Return Nil

*****************************************
Function Val_Vazio(cValue)
Local lRet:=Empt(cValue)
If lRet
MsgInfo("Este campo não pode ficar em branco!","Campo vazio")
Form_1.Text_1.SetFocus
Endif
Return Nil

*****************************************
Function Val_Valor(nValue)
Local lRet:=nValue>0
If !lRet
MsgInfo("Informe um valor maior que zero!","Valor inválido")
Form_1.Text_2.SetFocus
Endif
Return Nil

*****************************************
Function Val_Campo(cValue)
Local lRet:=.T., cCod:=STRZERO(VAL(cValue),4)
If VAL(cCod)>0
SELE ARQDEMO
GO TOP
SEEK cCod
If Found()
  Form_1.Text_3.Value := cCod
  Form_1.Label_1.Value := Alltrim(DESCRI)
Else
  MsgInfo("Código "+cCod+" não foi encontrado no arquivo de dados!","Valor inválido")
  Form_1.Text_3.SetFocus
Endif
Else
MsgInfo("Favor informar um valor para o campo!","Valor inválido")
Form_1.Text_3.SetFocus
Endif
Return Nil

********************************************
Proc CriarARQ()
Local aStruc := { {"COD","C",4,0}, {"DESCRI","C",30,0} },;
      cARQ:="ARQDEMO.DBF"

If !File( cARQ )
DBcreate( cARQ, aStruc )
USE ( cARQ ) NEW
For i=1 to 10
  Append Blank
  repl COD WITH STRZERO(i,4), DESCRI WITH "CAMPO "+STRZERO(i,2)
Next
Else
USE ( cARQ ) NEW
EndIF
If !File( "IND.NTX" )
INDEX ON COD TO IND
EndIF
SET INDEX TO IND
Return

O ToolTip descreve o que cada campo (TextBox) faz.

Abraços,

Textbox com Validação

MensagemEnviado: 13 Fev 2014 10:18
por pedrobsjunior
Toledo, obrigado pela dica. foi muito útil. se não for muito incômodo você poderia me dar um exemplo de como seria um textbox com uma máscara de valores em R$ ?

Textbox com Validação

MensagemEnviado: 13 Fev 2014 14:56
por Toledo
Pedro, segue um exemplo:

@ 10,10 TEXTBOX Text_1 ;
         VALUE 1234.56 ;
         NUMERIC INPUTMASK "99,999.99" FORMAT 'E'

Na pasta da HMG instalado no seu computador, veja outros exemplos, procure pela pasta \hmg.3.2\SAMPLES\Controls\TextBox\. No caso de máscaras para TextBox, veja as sub-pastas INPUTMASK.1 e INPUTMASK.2.

Abraços,

Textbox com Validação

MensagemEnviado: 17 Fev 2014 20:51
por pedrobsjunior
Obrigado Toledo, valeu muito a sua ajuda.

Agradeço.

Abraços.

Textbox com Validação

MensagemEnviado: 25 Nov 2017 07:20
por GilmarDalantonia
Bom dia... aproveitando o tópico... estou com o mesmo problema pra colocar mascara de em edit(get)... no clipper eu usava o picture assim "@e 999,999.99"... mas tentei desta forma no designer do hwgui, mas não deu certo... Ex: se a mascara for configurada assim @e 999,999.99, depois de digitado o 3 primeiros digitos, a ',' vem logo em seguida... se estiver assim @e 999999,99 e o valor for 250,35, as decimais só aparecem depois de digitado o 6 digitos inteiros... se alguem tiver um exemplo, fico muito grato pela ajuda... tentei usar o exemplo q o Toledo postou aqui no tópico, mas tb ñ funcionou...

Abraços.

Textbox com Validação

MensagemEnviado: 25 Nov 2017 10:07
por asimoes
No designer da hwgui não funciona se você colocar entre aspas '' na propriedade Picture
2017-11-25 11_09_46-Object Inspector.png
2017-11-25 11_09_46-Object Inspector.png (10.42 KiB) Visualizado 14424 vezes

Textbox com Validação

MensagemEnviado: 27 Nov 2017 05:01
por GilmarDalantonia
Bom dia... obrigado pela atenção asimoes... eu ja estava informando o picture como vc mostrou no exemplo... mesmo assim não funcionou...

se o picture estiver desta forma @E 999,999.99 e o valor a ser digitado for 150,25... ñ traz a virgula e sim o ponto...

Textbox com Validação

MensagemEnviado: 06 Dez 2017 16:40
por GilmarDalantonia
Boa tarde... ainda continuo com problemas com a mascara do editbox para moeda... as dicas que foram passadas não deram certo... nao sei se é a versão do hwgui que estou usando... até mesmo no designer não funciona... se alguem puder ajudar... fico muito grato

Textbox com Validação

MensagemEnviado: 06 Dez 2017 18:37
por JoséQuintas
. nao sei se é a versão do hwgui que estou usando


Sei lá de onde o post foi transferido, mas post começou em minigui, e depois virou hwgui....
Será que bebi na prévia do natal?....

Textbox com Validação

MensagemEnviado: 07 Dez 2017 07:56
por asimoes
Gilmar,

Bom dia,

Publique o seu problema no fórum Hwgui
Outra coisa, use o objeto GET ao invés de EDITBOX

Textbox com Validação

MensagemEnviado: 07 Dez 2017 09:29
por JoséQuintas
mas post começou em minigui, e depois virou hwgui


Agora que percebi....
O primeiro post é de 2014, os novos é que foram errados.

Ao Gilmar:
é normal a confusão, até se acostumar com o fórum.
O fórum procura organizar as dúvidas pra ficar mais fácil de alguém pesquisar/responder.

Sobre o problema: É importante mencionar a versão, parece que depois da HWGUI 2.17 houve mudança, que ainda não está 100% compatível com recursos anteriores, ou necessita algo mais.

Textbox com Validação

MensagemEnviado: 05 Fev 2019 17:37
por syslink
como fazemos pra validar o TAB ou o clique do mouse noutro TEXTBOX e e nos avisar sem travar o sistema.
tipo assim, mudar a cor do TEXTBOX como alerta?

obrigado!

Textbox com Validação

MensagemEnviado: 05 Fev 2019 19:24
por Nascimento
on lostfocus{||Valida(this.value)}
agora use com cuidado porque se vc por no primeiro textbox e fechar a janela pode dar problemas

Textbox com Validação

MensagemEnviado: 25 Mar 2020 15:05
por syslink
outra duvida
ONENTER iif(CONFIRMOU := F_MUDA_SENHA_HMG.TBmPASSWORD.value == F_MUDA_SENHA_HMG.TBaPASSWORD.value, F_MUDA_SENHA_HMG.Bt_1.setfocus,F_MUDA_SENHA_HMG.TBaPASSWORD.setfocus)

sem criar uma funcao especifica eu gostaria de acrescentar em caso de senhas incorretas uma mensagem de msgexclamation, algo do tipo assim
iif(condicao, resultado positivo,resultado negativo)
nisso nao sei ou nao estou lembrano como faze...
como faso para que RESULTADO NEGATIVO execute 2 coisas sem precisa de criar uma FUNCTION para validacao?

obs
seria o caso de um codeblock {||()}?

Textbox com Validação

MensagemEnviado: 25 Mar 2020 16:58
por MSDN
Pelo código que vc colocou, está simples ver o erro, quando vc usa Iif() deve ser assim :

IIF( faz a comparação, se comparação ok executa o que estiver aqui, senão executa o que estiver aqui )

Exemplo

IIF( vSexo == 'M', " Sexo Masculino ", " Sexo Feminino " )

No seu caso, vc não fez uma comparação no inicio, fez uma atribuição usando " := "

Abraço

Textbox com Validação

MensagemEnviado: 25 Mar 2020 19:55
por syslink
MSDN escreveu:está simples ver o erro
num tem erro
vc entendeu errado
quero fazer na ultima verificacao do iif uma dupla execucacao de tarefa
sem precisa criar uma function pra resolver tudo
eh possivel?

Textbox com Validação

MensagemEnviado: 25 Mar 2020 23:54
por Heero
syslink escreveu:
MSDN escreveu:está simples ver o erro
num tem erro
vc entendeu errado
quero fazer na ultima verificacao do iif uma dupla execucacao de tarefa
sem precisa criar uma function pra resolver tudo
eh possivel?


Syslink,

Veja se é isso que você quer:

IIF(MsgYesNo("Exemplo"), ResultadoPositivo(), {ResultadoNegativo1(), ResultadoNegativo2()})


Por favor, retorne se é isso mesmo, abraços.

Textbox com Validação

MensagemEnviado: 26 Mar 2020 20:03
por alxsts
Olá!
ONENTER iif(CONFIRMOU := F_MUDA_SENHA_HMG.TBmPASSWORD.value == F_MUDA_SENHA_HMG.TBaPASSWORD.value, F_MUDA_SENHA_HMG.Bt_1.setfocus,F_MUDA_SENHA_HMG.TBaPASSWORD.setfocus)


O teu exemplo é em MiniGUI, com a qual não tenho intimidade. Na HwGUI, sempre que codificamos ações relacionadas a eventos do formulário, o fazemos na forma de code blocks:
ON CLICK { || Acao() }

No caso do If imediato ( IIF() ), se mais de uma ação precisar ser executada, colocamos as ações entre parêntesis, separados por vírgula:
ON CLICK { || iif( ( CONFIRMOU := F_MUDA_SENHA_HMG.TBmPASSWORD.value() ) == F_MUDA_SENHA_HMG.TBaPASSWORD.value(), F_MUDA_SENHA_HMG.Bt_1.setfocus(), ( Mensagem( "Senha incorreta!" ), F_MUDA_SENHA_HMG.TBaPASSWORD.setfocus() ) }


Pessoalmente, acho que a boa prática é criar funções para tratamento dos eventos. Estes IIfs, dependendo da situação, vão crescendo e a leitura e manutenção deste tipo de código se tornam cada vez mais difícil, como já se percebe no código acima.

Textbox com Validação

MensagemEnviado: 26 Mar 2020 20:14
por JoséQuintas
Codeblock é função.
Precisa testar, já não lembro direito a sintaxe:

ON CLICK { || ;
   IF ( CONFIRMOU := F_MUDA_SENHA_HMG.TBmPASSWORD.value() ) == F_MUDA_SENHA_HMG.TBaPASSWORD.value();
      F_MUDA_SENHA_HMG.Bt_1.setfocus();
   ELSE
      Mensagem( "Senha incorreta!" );
      F_MUDA_SENHA_HMG.TBaPASSWORD.setfocus();
   ENDIF;
   }

Textbox com Validação

MensagemEnviado: 26 Mar 2020 20:27
por JoséQuintas
Aceitou isto:

PROCEDURE MAIN

   LOCAL bCode

   CLS
   bCode := { | A, B |
   IF A = B
      Chama1()
   ELSE
      Mensagem( "Senha incorreta!" )
      Chama2()
   ENDIF
   ? "teste"
   Inkey(0)
   RETURN NIL
   }
   Eval( bCode )

FUNCTION Chama1(); RETURN NIL
FUNCTION Chama2(); RETURN NIL
FUNCTION Mensagem(); RETURN NIL

Textbox com Validação

MensagemEnviado: 28 Mar 2020 23:25
por syslink
muito complicado. melhor mesmo partir pra funcao q jah fiz e funciono.

Textbox com Validação

MensagemEnviado: 29 Mar 2020 13:10
por MSDN
Tudo bem que vc conseguiu fazer uma função que resolveu seu problema, porém, expor da forma como fez, não foi muito educado com todo mundo que tentou te ajudar ! Podia colocar um " Valeu " " Obrigado "

Textbox com Validação

MensagemEnviado: 12 Abr 2020 19:26
por syslink
MSDN escreveu: não foi muito educado
sinto mto nao era a intensao de ser mau educado. brigadu a todos pela ajuda e forsa.