Controles automaticos
Moderador: Moderadores
Controles automaticos
Boa noite!
Gostaria de saber dos colegas do grupo se é possível fazer uma função para quando eu digitar num controle TextBox no termino do mesmo eu não precisasse pressionar o ENTER ou TAB para ir para o próximo controle. Será que é realmente possível fazer isto na Minigui Extend 2.3.2?
Desde já agradeço a atenção dos colegas e espero que alguém possa me dar uma ajuda sobre o assunto.
Abraços,
Paulo - Jacareí/SP
Gostaria de saber dos colegas do grupo se é possível fazer uma função para quando eu digitar num controle TextBox no termino do mesmo eu não precisasse pressionar o ENTER ou TAB para ir para o próximo controle. Será que é realmente possível fazer isto na Minigui Extend 2.3.2?
Desde já agradeço a atenção dos colegas e espero que alguém possa me dar uma ajuda sobre o assunto.
Abraços,
Paulo - Jacareí/SP
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Controles automaticos
Amigo, segue abaixo um exemplo de como simular o SET CONFIRM OFF em um TextBox:
ATENÇÃO: para que a função SetConfOFF() funcione corretamente, você tem que informar no TextBox o parâmetro MAXLENGTH ou INPUTMASK. E é claro, chamar a função SetConfOFF(This.Value) no parâmetro ON CHANGE.
Abraços,
Código: Selecionar todos
#include "minigui.ch"
Function Main()
SET NAVIGATION EXTENDED
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 400 HEIGHT 300 ;
TITLE 'Simulando SET CONFIRM OFF em TextBox' ;
MAIN
DEFINE LABEL Label_1
ROW 10
COL 10
WIDTH 60
VALUE 'Campo 1:'
END LABEL
DEFINE TEXTBOX Text_1
ROW 10
COL 70
WIDTH 180
MAXLENGTH 20
ON CHANGE {|| SetConfOFF(This.Value) }
END TEXTBOX
DEFINE LABEL Label_2
ROW 38
COL 10
WIDTH 60
VALUE 'Campo 2:'
END LABEL
DEFINE TEXTBOX Text_2
ROW 38
COL 70
WIDTH 180
MAXLENGTH 10
ON CHANGE {|| SetConfOFF(This.Value) }
END TEXTBOX
DEFINE LABEL Label_3
ROW 66
COL 10
WIDTH 60
VALUE 'Campo 3:'
END LABEL
DEFINE TEXTBOX Text_3
ROW 66
COL 70
WIDTH 180
INPUTMASK "999.999.999-99"
ON CHANGE {|| SetConfOFF(This.Value) }
END TEXTBOX
END WINDOW
Form_1.Center
Form_1.Activate
Return Nil
************************************
FUNCTION SetConfOFF( cCampo )
LOCAL cFrmName := thiswindow.name
LOCAL cCmpName := this.focusedcontrol
LOCAL nDigitado := len(alltrim( cCampo ))
LOCAL x := GetControlIndex(cCmpName,cFrmName)
LOCAL nMaxLength := _HMG_aControlRangeMax[x]
LOCAL nInputMask := Len(_HMG_aControlInputMask[x])
IF nInputMask > 0
nMaxLength := nInputMask
ENDIF
IF nDigitado == nMaxLength
InsertTab()
ENDIF
RETURN NilAbraç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
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
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Controles automaticos
Muito bem elaborado, Toledo.
Fiz baseado na sua indicação para trabalhar em HMG também:Fiz deste jeito porque HMG não consegue ler as propriedades: MaxLength e InputMask. Ai o jeito é forçar com parâmetros.
Valeu !
Fiz baseado na sua indicação para trabalhar em HMG também:
Código: Selecionar todos
#include <hmg.ch>
Function Main()
SET NAVIGATION EXTENDED
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 400 HEIGHT 300 ;
TITLE 'Simulando SET CONFIRM OFF em TextBox' ;
MAIN
DEFINE LABEL Label_1
ROW 10
COL 10
WIDTH 60
VALUE 'Campo 1:'
END LABEL
DEFINE TEXTBOX Text_1
ROW 10
COL 70
WIDTH 180
MAXLENGTH 20
ON CHANGE {|| SetConfOFF(This.Value,20,0) }
END TEXTBOX
DEFINE LABEL Label_2
ROW 38
COL 10
WIDTH 60
VALUE 'Campo 2:'
END LABEL
DEFINE TEXTBOX Text_2
ROW 38
COL 70
WIDTH 180
MAXLENGTH 10
ON CHANGE {|| SetConfOFF(This.Value,10,0) }
END TEXTBOX
DEFINE LABEL Label_3
ROW 66
COL 10
WIDTH 60
VALUE 'Campo 3:'
END LABEL
DEFINE TEXTBOX Text_3
ROW 66
COL 70
WIDTH 180
INPUTMASK "999.999.999-99"
ON CHANGE {|| SetConfOFF(This.Value,0,Len("999.999.999-99")) }
END TEXTBOX
END WINDOW
Form_1.Center
Form_1.Activate
Return Nil
Function SetConfOFF( cCampo, nMaxLength, nInputMask )
Local nDigitado := Len(AllTrim( cCampo ))
If nInputMask > 0
nMaxLength := nInputMask
Endif
If nDigitado == nMaxLength
InsertTab()
Endif
Return NilValeu !
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.
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.
Controles automaticos
Boa tarde!
Caros Toledo e Pablo obrigado pela suas dicas. Fiz o que vocês me mostraram aqui deu certo sem problemas, mas somente para campos que são tipo alfanuméricos os de tipo Data, na minha primeira tentativa deu erro e depois fiz uma alteração na seguinte linha:
Para:
Mas depois desta alteração eu não consigo digitar o ano pois ele vai direto para o próximo TEXTBOX quando digito o mês. Será que tem como contornar isto?
Abraços,
Paulo - Jacareí/SP
Caros Toledo e Pablo obrigado pela suas dicas. Fiz o que vocês me mostraram aqui deu certo sem problemas, mas somente para campos que são tipo alfanuméricos os de tipo Data, na minha primeira tentativa deu erro e depois fiz uma alteração na seguinte linha:
Código: Selecionar todos
LOCAL nDigitado := LEN( ALLTRIM( cCampo ) )
Código: Selecionar todos
LOCAL nDigitado := LEN( IF( VALTYPE( cCampo ) = "D" , ALLTRIM( DTOC( cCampo ) ) , ALLTRIM( cCampo ) ) )
Abraços,
Paulo - Jacareí/SP
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Controles automaticos
Oi Paulo, tente substituindo com:
Código: Selecionar todos
Local nDigitado := If( ValType( cCampo ) = "D" , Form_1.Text_2.CaretPos , Len( AllTrim( cCampo ) ) )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.
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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Controles automaticos
Aliás, fiz desta forma mais genérica. Observe que não é mais necessário passar o cCampo como argumento na função SetConfOFF:
Para HMG:
E para MiniGui Extended:
Toledo, espero que não se importe de eu ter postado no fórum oficial HMG adicionando a edição de sobre-escrito no TextBox. Agradeço desde já.
Para HMG:
Código: Selecionar todos
#include <hmg.ch>
Function Main()
SET NAVIGATION EXTENDED
SET DATE TO BRITISH
SET CENTURY ON
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 400 HEIGHT 150 ;
TITLE 'Simulating SET CONFIRM OFF at TextBox' ;
MAIN
DEFINE LABEL Label_1
ROW 20
COL 30
WIDTH 160
VALUE 'Field 1 (Length 10):'
FONTBOLD .T.
END LABEL
DEFINE TEXTBOX Text_1
ROW 20
COL 160
WIDTH 180
MAXLENGTH 10
ON CHANGE {|| SetConfOFF(10,0) }
END TEXTBOX
DEFINE LABEL Label_2
ROW 48
COL 30
WIDTH 160
VALUE 'Field 2 (Length 10):'
FONTBOLD .T.
END LABEL
DEFINE TEXTBOX Text_2
ROW 48
COL 160
WIDTH 180
MAXLENGTH 10
DATE .T.
ON CHANGE {|| SetConfOFF(10,0) }
END TEXTBOX
DEFINE LABEL Label_3
ROW 76
COL 30
WIDTH 160
VALUE 'Field 3 (Length 14):'
FONTBOLD .T.
END LABEL
DEFINE TEXTBOX Text_3
ROW 76
COL 160
WIDTH 180
INPUTMASK "999.999.999-99"
ON CHANGE {|| SetConfOFF(0,Len("999.999.999-99")) }
END TEXTBOX
END WINDOW
Form_1.Center
Form_1.Activate
Return Nil
Function SetConfOFF( nMaxLength, nInputMask )
Local cFrmName := ThisWindow.Name
Local cCmpName := This.FocusedControl
If nInputMask > 0
nMaxLength := nInputMask
Endif
If !Empty(cCmpName)
If nMaxLength == GetProperty(cFrmName,cCmpName,"CaretPos")
InsertTab()
Endif
Endif
Return NilCódigo: Selecionar todos
#include "minigui.ch"
Function Main()
SET NAVIGATION EXTENDED
SET DATE TO BRITISH
SET CENTURY ON
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 400 HEIGHT 150 ;
TITLE 'Simulating SET CONFIRM OFF at TextBox' ;
MAIN
DEFINE LABEL Label_1
ROW 20
COL 30
WIDTH 160
VALUE 'Field 1 (Length 10):'
FONTBOLD .T.
END LABEL
DEFINE TEXTBOX Text_1
ROW 20
COL 160
WIDTH 180
MAXLENGTH 10
ON CHANGE {|| SetConfOFF() }
END TEXTBOX
DEFINE LABEL Label_2
ROW 48
COL 30
WIDTH 160
VALUE 'Field 2 (Length 10):'
FONTBOLD .T.
END LABEL
DEFINE TEXTBOX Text_2
ROW 48
COL 160
WIDTH 180
MAXLENGTH 10
DATE .T.
ON CHANGE {|| SetConfOFF() }
END TEXTBOX
DEFINE LABEL Label_3
ROW 76
COL 30
WIDTH 160
VALUE 'Field 3 (Length 14):'
FONTBOLD .T.
END LABEL
DEFINE TEXTBOX Text_3
ROW 76
COL 160
WIDTH 180
INPUTMASK "999.999.999-99"
ON CHANGE {|| SetConfOFF() }
END TEXTBOX
END WINDOW
Form_1.Center
Form_1.Activate
Return Nil
Function SetConfOFF()
Local cFrmName := ThisWindow.Name
Local cCmpName := This.FocusedControl
Local x := GetControlIndex(cCmpName, cFrmName)
Local nMaxLength := _HMG_aControlRangeMax[x]
Local nInputMask := Len(_HMG_aControlInputMask[x])
If nInputMask > 0
nMaxLength := nInputMask
Endif
If !Empty(cCmpName)
If nMaxLength == GetProperty(cFrmName,cCmpName,"CaretPos")
InsertTab()
Endif
Endif
Return NilUm 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.
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.
Controles automaticos
Bom dia!
Caros Toledo e Pablo muito obrigado pela ajuda que vocês me deram, foi de grande ajuda está funcionando 100% vocês são os mestres.
Abraços,
Paulo - Jacareí/SP
Caros Toledo e Pablo muito obrigado pela ajuda que vocês me deram, foi de grande ajuda está funcionando 100% vocês são os mestres.
Abraços,
Paulo - Jacareí/SP
Controles automaticos
Bom dia!
Caros amigos eu estava fazendo uns testes com a função que vocês postaram aqui está funcionando, mas quando eu ponho está função em um TEXTBOX que tem uma validação de dados como por exemplo: Quando digito um número de CPF, CEP ou etc...errado ele sempre vai para o próximo TEXTBOX ao invés de ficar no TEXTBOX que o dado está incorreto, a função de validação que eu criei está no ONENTER, será que tem haver.
O que pode ser feito para resolver este problema? Desde já agradeço as dicas dos colegas deste grupo.
Abraços,
Paulo - Jacareí/SP
Caros amigos eu estava fazendo uns testes com a função que vocês postaram aqui está funcionando, mas quando eu ponho está função em um TEXTBOX que tem uma validação de dados como por exemplo: Quando digito um número de CPF, CEP ou etc...errado ele sempre vai para o próximo TEXTBOX ao invés de ficar no TEXTBOX que o dado está incorreto, a função de validação que eu criei está no ONENTER, será que tem haver.
O que pode ser feito para resolver este problema? Desde já agradeço as dicas dos colegas deste grupo.
Abraços,
Paulo - Jacareí/SP
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Controles automaticos
Amigo, tente mudar a sua função de validação de ON ENTER para ON LOSTFOCUS.
Abraços,
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
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
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Controles automaticos
Eu aconselho você chamar a função que valida o CPF na linha anterior do InsertTab()
Código: Selecionar todos
If CPF_OK()=.T.
InsertTab()
Else
MsgStop("CPF errado !")
EndifUm 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.
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.
Controles automaticos
Boa noite!
Aos mestres deste grupo, agora estou com uma dúvida cruel, a função que vocês postaram no post está funcionando perfeitamente, mas agora quando eu coloco a função junto com uma função de validação de campo não está focando no Textbox quando eu digito o valor que não corresponde a validação e vai para o próximo Textbos.
Isto está ocorrendo quando eu faço uma validação do campo NOME que não pode ficar em branco, já fiz o ajuste que o amigo Toledo me diz, funcionou para os campos que tem validação para CPF, e DATA e NUMÉRICO, mas eu estou com problemas com campos tipo CARÁCTER, o que eu estou fazendo errado?
Abraços,
Paulo - Jacareí/SP
Aos mestres deste grupo, agora estou com uma dúvida cruel, a função que vocês postaram no post está funcionando perfeitamente, mas agora quando eu coloco a função junto com uma função de validação de campo não está focando no Textbox quando eu digito o valor que não corresponde a validação e vai para o próximo Textbos.
Isto está ocorrendo quando eu faço uma validação do campo NOME que não pode ficar em branco, já fiz o ajuste que o amigo Toledo me diz, funcionou para os campos que tem validação para CPF, e DATA e NUMÉRICO, mas eu estou com problemas com campos tipo CARÁCTER, o que eu estou fazendo errado?
Abraços,
Paulo - Jacareí/SP
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Controles automaticos
Amigo, volte a função de validação para ON ENTER, pois fiz alguns teste aqui e as duas funções funcionam certinho.
Se o seu código não funcionar, mostre como você está montando o TEXTBOX e como está as funções de validação e SetConfOFF.
Abraços,
Se o seu código não funcionar, mostre como você está montando o TEXTBOX e como está as funções de validação e SetConfOFF.
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
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
Controles automaticos
Bom dia!
Será que é possível me passar um exemplo de como eu coloco corretamente uma função de validação (Carácter, Data e Numérico) com a função SetConfoof(), pois estou apanhando um pouco para ajustar a função.
Quem puder me passar ficarei grato.
Abraços,
Paulo - Jacareí/SP
Será que é possível me passar um exemplo de como eu coloco corretamente uma função de validação (Carácter, Data e Numérico) com a função SetConfoof(), pois estou apanhando um pouco para ajustar a função.
Quem puder me passar ficarei grato.
Abraços,
Paulo - Jacareí/SP
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Controles automaticos
Abraços,Toledo escreveu:mostre como você está montando o TEXTBOX e como está as funções de validação e SetConfOFF
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
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
Controles automaticos
Boa tarde!
Toledo ainda está dando erro, quando a validação e .F. ele não fica no TEXTBOX e mostra mensagem de erro, segue o trecho de como eu estou colocando as funções:
Abraços,
Paulo - Jacareí/SP
Toledo ainda está dando erro, quando a validação e .F. ele não fica no TEXTBOX e mostra mensagem de erro, segue o trecho de como eu estou colocando as funções:
Código: Selecionar todos
DEFINE TEXTBOX text_3
ROW 96
COL 180
WIDTH 120
HEIGHT 20
FONTNAME "Arial"
FONTSIZE 9
FONTBOLD .T.
FONTCOLOR {0,0,0}
DATE .T.
BACKCOLOR {245,222,179}
ONLOSTFOCUS { || IF( ::ValidarData( This.Value ) = .F. , Janela10.text_3.SetFocus , Janela10.Text_4.SetFocus ) }
ONCHANGE { || SetConfOFF() }
END TEXTBOX
*******************************************
Function ValidarData( cData )
LOCAL nAno , nMes , nDia , nBissesto , nRet , lRet
nDia := DAY( cData )
nMes := MONTH( cData )
nAno := YEAR( cData )
nBissesto := INT( nAno / 4 )
IF nMes = 2
nRet := IF( nBissesto = 0 , 29 , 28 )
IF nRet > nDia
MSG_ERRO("Data digitada incorreta ! Por favor digite novamente.")
lRet := .F.
ENDIF
IF nDia > 30 .OR. nDia > 31
MSG_ERRO("Data digitada incorreta ! Por favor digite novamente.")
lRet := .F.
ELSE
lRet := .T.
ENDIF
ENDIF
RETURN(lRet)
Paulo - Jacareí/SP
