Página 1 de 1

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

Enviado: 02 Dez 2004 11:28
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

Enviado: 07 Dez 2004 23:28
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 :?)

Enviado: 08 Dez 2004 06:34
por Barbosa
Rochinha eu estou acompanhando sim seus ensinamentos, parabéns pela iniciativa.
Obrigado pelas dicas, vou testar.

Um abraço.

Geraldo Barbosa

Enviado: 10 Dez 2004 21:02
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 :?)