Página 1 de 1
Não permitir o uso da tecla TAB
Enviado: 18 Set 2010 11:30
por Toledo
Amigos, eu tenho um cliente que está muito acostumado em usar a tecla TAB para mudar o focu de um campo para outro em formulários na internet. E no meu programa ele também está usando o TAB ao invés da tecla Enter. O problema é que em alguns campos existem validações que só ocorrem se for pressionada a tecla Enter.
Bom, existe uma maneira de não permitir o uso da tecla TAB dentro de um formulário com a MiniGui?
Abraços,
Re: Não permitir o uso da tecla TAB
Enviado: 18 Set 2010 12:07
por Maligno
Não seria mais prático configurar o evento da tecla TAB para responder como se fosse ENTER?
Re: Não permitir o uso da tecla TAB
Enviado: 19 Set 2010 09:08
por Toledo
Olá Maligno, as validações geralmente estão em campos TextBox, que não tem evento para a tecla TAB. Mas um dos eventos do TextBox é OnLostFocus, que é executado quando se perde o focu do campo. Então acho que vou colocar neste evento as validações, assim não importa se foi usado Enter ou TAB.
Abraços,
Re: Não permitir o uso da tecla TAB
Enviado: 19 Set 2010 20:17
por Stanis Luksys
Olá Toledo!
Eu sempre uso o OnLostFocus quando necessito de alguma validação direta no campo. No entanto, isso só é válido se algum outro objeto (textbox, label etc) for atualizado por causa deste primeiro, algo como antigo GET...WHEN do Clipper.
Na programação em modo GUI é mais comum e prático colocar validações centralizadas no final do formulário, por exemplo no botão "Ok" ou seja lá o que for. No evento da tecla Enter é impossível realizar tarefas de validação a menos que se desabilite o referido botão, o que daria muito mais trabalho, apesar de que fica bem legal também.
Mas a validação no final fica interessante também porque com uma função simples você pode retornar ao formulário já decorando os campos com erros e fazendo outras frescuras. Alguns programas já deixam o campo vermelhinho por padrão, e só branqueam ele na validação do onLostFocus ou mesmo pelo onChange... Enfim, as possibilidades são inúmeras, e eu prefiro validar tudo no fim.
Mudando de assunto... Você chegou a testar a hbqt? Estou cada dia mais surpreso com ela, vocês que acomapanharam minhas postagens durante um bom tempo viram o quanto eu defendia MiniGUI, porque era mesmo a melhor acredito eu... No entanto hoje em dia não há comparação, a hbqt está disparadamente na frente de qualquer outra lib gráfica para xHarbour, incluindo as pagas, em termos de recursos, número de objetos etc. Dá uma olhada na documentação da Qt propriamente, é impressionante. Não é a toa que MiniGI vai tentar usar a Qt agora... Mas essa historia é velha, faz 4 anos que iam usar a GTK e até hoje nada... Se o programa não for grande, eu mudaria pra hbqt enquanto é tempo. A MiniGUI tende a morrer, só não tão rápido porque já deu tempo de deixar um legado.
Abraços.
Re: Não permitir o uso da tecla TAB
Enviado: 19 Set 2010 20:31
por Maligno
você pode retornar ao formulário já decorando os campos com erros e fazendo outras frescuras
Já acho que a decoração afrescurada fica bem melhor, ou como Aninha diria, mais chic (ui), quando ela é feita conforme a digitação é avaliada. Exemplo:
http://pub.buzinello.com/tools/valdoc.zip
Até porque, como se vê nesse programa, nem sempre se tem um "ok" no final.
Re: Não permitir o uso da tecla TAB
Enviado: 19 Set 2010 20:39
por Stanis Luksys
Opa,
Eu estava editando lá o post anterior pra não ficar criando mais, mas vocês como sempre muito rápidos...
Pois é, neste caso pode-se usar o OnChange... Fica dez mesmo!
De qualquer forma, ao meu ver, uma validação final é imprescindível, e pode-se usar as mesmas funções que se usou no onChange de cada objeto, o que facilita bastante.
Eu gosto bastante de tentar seguir o padrão, com três botões, "Cancelar", "Aplicar" e "Ok". Embora nem sempre seja útil, é padrão universal e qualquer macaco já entende o que faz cada um... rs
Abraços.
PS: Não consigo executar o valdoc.exe no Linux, mas entendi pela mensagem.
Re: Não permitir o uso da tecla TAB
Enviado: 19 Set 2010 20:51
por Stanis Luksys
Eu ia editar, mas vou postar mais um... rs
No caso, me parece importante sempre ter ao menos um botão que faça o que só seria possível através do teclado, por uma questão de acessibilidade.
Quando eu digo de usar os três botões padrões, me refiro, claro, a programas que vão gravar alguma coisa em algum lugar, se for validação simples que fica só na memória, não tem porquê.
Re: Não permitir o uso da tecla TAB
Enviado: 19 Set 2010 20:56
por Maligno
Ops. Desculpe. Esqueci de dizer que o programa é Windows.

Re: Não permitir o uso da tecla TAB
Enviado: 20 Set 2010 07:41
por Toledo
Stanis Luksys escreveu:No entanto, isso só é válido se algum outro objeto (textbox, label etc) for atualizado por causa deste primeiro
Stanis, este é o meu caso! Nestas validações eu altero o valor de labels, mudo a opção inicial de combobox, permito ou não a edição de certos textbox, etc.
Mas já está resolvido, mudei todas as validações para o evento OnLostFocus.
Stanis Luksys escreveu:Você chegou a testar a hbqt?
Sim, estou acompanhando a evolução da HBQT com Harbour desde novembro do ano passado.
Stanis Luksys escreveu:Não é a toa que MiniGI vai tentar usar a Qt agora...
Estou também acompanhando a HMG 4, que está em desenvolvimento em QT e toda orientada a objeto. Pelos exemplos postados, achei mais fácil a programação em QT via MiniGui. Se o Roberto Lopez conseguir levar esta versão adiante e migrar a IDE da MiniGui para gerar código em QT (já em desenvolvimento), a MiniGui não vai morrer tão fácil não. Inclusive, a instalação da MiniGui (HMG4) para desenvolver em QT é bem mais fácil, basta instalar a HMG4 e pronto. Você não precisa ficar instalando a QT, compilando LIBs, configurando ambiente, etc. Junto com a Minigui já vem uma versão da QT. Ai é só usar o BUILD.BAT para compilar os exemplos.
Abraços,
Re: Não permitir o uso da tecla TAB
Enviado: 20 Set 2010 14:19
por Stanis Luksys
Olá,
É verdade, acho que exagerei ao dizer que MiniGUI vai morrer, até mesmo porque se a migração da HMG para esta nova versão que usa a Qt for indolor, com a mesma sintaxe, vai ficar jóia!
Eu achei sacanagem que esta versão da HMG só está sendo distribuida em versão .exe instalável, e não tenho como instalar no Linux. Não custava nada os caras colocarem um zip lá... Eu fiquei curioso pra ver o código da lib em sí. Eu gostei da forma como a hbqt está estruturada, pode-se dizer que ela não adiciona nada ao que tem a Qt.
Já a MiniGUI tem muitas funções prontas interessantes, mesmo que simples, como MsgInfo() e este tipo de coisa. Se todas elas forem mantidas usando a Qt, a lib vai ficar mais completa que a própria hbqt, onde você precisa fazer isso na mão.
Abraços.
Re: Não permitir o uso da tecla TAB
Enviado: 20 Set 2010 14:34
por Toledo
Stanis Luksys escreveu:Eu achei sacanagem que esta versão da HMG só está sendo distribuida em versão .exe instalável
Stanis, já tem versões para Linux e MacOS! Veja o link abaixo:
http://sourceforge.net/projects/hmg/files/
Abraços,
Re: Não permitir o uso da tecla TAB
Enviado: 20 Set 2010 16:57
por Stanis Luksys
Toledo,
Já baixei e está tudo compilando e funcionando perfeitamente bem.
Eu lí partes do código da LIB e ela nada mais é do que uma implementação da hbqt. Ou seja, dá uma nova roupagem a sintaxe padrão da Qt, através de classes. Não mantém compatibilidade com a sintaxe anterior da MiniGUI.
Não sei, precisamos aguradar a avolução desta lib... No momento me parece mais simples para quem quer usar os recursos da Qt no harbour, usar a lib hbqt mesmo.
Abraços.
Não permitir o uso da tecla TAB
Enviado: 06 Abr 2019 00:17
por microvolution
Nobres professores, em primeiro lugar, obrigado por lerem e ao Toledo por este fórum existir.
Bom, o link não mais funciona.
Nunca entendi bem a questão do LOSTFOCUS, GOTFOCUS.
O ONENTER até que entendo "mais ou menos", mas, de tanto vasculhar nunca encontrei o tipo de ONTAB. Então, testei do jeito abaixo. Se, estiver correto, pode ser que ajude a alguém a entender:
Código: Selecionar todos
ONLOSTFOCUS { || iif (fSENHA ( This.Value ) , DoMethod("Login","PassWord","SetFocus") , This.Setfocus ) }
ONENTER { || fSENHA (This.Value) }
ou se alguém dos professores tiver algo melhor, por enquanto o que tenho é só.