Que fazer para GET'S aceitar [ENTER] e não só [TAB]

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

Barbosa
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 12 Jul 2004 13:47

Que fazer para GET'S aceitar [ENTER] e não só [TAB]

Mensagem por Barbosa »

Bom dia pessoal.

Minha dúvida é essa, estou começando e já consegui fazer alguns DIALOG, muito interessantes, mas que fazer para que dentro de cadastro qualquer eu consiga mudar de um campo para outro teclando [EN TER] ou [SETAS] e não só o [TAB].

Obrigado amigos.

Geraldo Barbosa
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinho

Voce esta acompanhando as aulas que estou postando?

Apesar de meu pequeno espaço de tempo livre vou divulgando as aulas conforme o que vou passando ao converter meu sistema.

Quanto a sua pergunta. Voce esta usando o WorkShop ou não.

Caso esteja será necessário apenas ordenar os controles pela opção Options/Set Order.

O problema com o ENTER ocorre quando montamos um DIALOGo e não REDEFINEmos os controles, sendo que o foco ficará sempre no ultimo controle posicionado no mesmo.

Ao redefinir os controles e zeras as variaveis o ENTER funciona normalmente.

Caso não esteja usando WorkShop, use o parâmetro ON CHANGE e coloque o seguinte:

Código: Selecionar todos

   ... ON CHANGE (oGetAtual:LostFocus(oGetAtual),;
                          oGetProximo:SetFocus())
Ou seja, deve-se perder o foco do GET em que o cursor está e dizer qual o próximo GET que receberá o cursor.

Isto é muito util quando temos controles em várias abas de FOLDERs e queremos passar para a próxima aba sem usar o mouse.

Código: Selecionar todos

   REDEFINE GET oGet16 VAR M->VARIAVEL PICTURE "@!" ID 118 ;
                  OF oFld:aDialogs[01] ;
                  ON CHANGE (oGetAtual:LostFocus(oGetAtual),;
                                      oFld:SetOption(2),;
                                      oGetProximo:SetFocus())
Neste caso o oGetAtual esta posicionado na aba 1 do FOLDER oFld e oGetProximo esta posicionado na aba 2.

Com o parâmetro ON CHANGE ao usar o ENTER o foco de oGetAtual é retirado, a função SetOption do objeto oFld recebe o parâmetro 2 que indica o numero da aba e então oGetProximo recebe o foco.

Agora quando usamos COMBOBOXes nos DIALOGos não conseguimos dar ENTER para o próximo controle pois no mesmo ON CHANGE não funciona, então usamos:

Código: Selecionar todos

   REDEFINE COMBOBOX oCbx7 VAR M->AVALIACAO ;
                  ITEMS { "OTIMO", "BOM", "REGULAR", "RUIM", "PESSIMO" } ;
                  ID 213 OF oFld:aDialogs[02]
   oCbx7:bKeyDown := {|nKey,nFlags|if(nKey==VK_RETURN,;
             (oCbx7:LostFocus(oCbx7),oFld:SetOption(2),oGet214:SetFocus()),),nil}
Agora com estes dicas voce provavelmente terá mais trabalho.

@braços :?)
Barbosa
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 12 Jul 2004 13:47

Mensagem por Barbosa »

Rochinha eu estou acompanhando sim seus ensinamentos, parabéns pela iniciativa.
Obrigado pelas dicas, vou testar.

Um abraço.

Geraldo Barbosa
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinhos

Existe um outro detalhe que deixei passar:

Quando usamos os controles GET dentro de um controle FOLDER o ENTER funciona ShowDeBola pulando de controle em controle, menos no COMBOBOX que deve ser usado com explicado no POST anterior.

Quando usamos os controles GET diretamente dentro de DIALOGs criadas no WorkShop o ENTER não funciona a menos que marquemos o WANT RETURN nas propriedades do controle GET.

Para isto basta escolher o controle GET, clicar duas vezes e marcar WANT RETURN.

@braços :?)
Responder