Ir para conteúdo
Fórum Script Brasil
  • 0

Tab Por Enter (RESOLVIDO)


Paulo Nobre

Pergunta

Estou usando este código para trocar tab por enter

if key = #13 then

begin

Perform(WM_NextDlgCtl,9,0);

key:= #0;

end;

No meu caso ele está apresentando problema.

A mudança de campos está sendo de trás para frente, ou seja,

Com tab vou do campo 1 para o 2, para o 3 etc..

Com enter ao invés de ir de 1 para 2 para 3 é feito o contrário; de 3 para 2 para1.

Alguém sabe dizer o que está acontecendo.

Na propriedade order do tab está tudo normal.

Sei que existem variações de código para trocar enter por tab, mas gostaria de saber porque este código está dando errado. Se é que é o código.

Obrigado

Paulo Nobre

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Bom, WM_NextDlgCtl é uma msg que informa a mudança de foco nos controles.

Sua sintaxe é: WM_NextDlgCtl, wParam, lParam; onde neste tipo de msg wParam indica como ou qual controle irá receber o foco. Se lParam for <> 0, então wParam deve indicar qual controle irá receber o foco; se lParam for = 0, então wParam deve informar o seguinte: 0-próximo controle; não 0 - controle anterior.

No seu caso, você está informando 9 em wParam e 0 em lParam; daí o motivo pelo qual o controle anterior recebe o foco.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Paulo.

Você uma desses dicas tambem:

Substituindo TAB pelo ENTER

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
   if Key = #13 then
      if not (ActiveControl is TDBGrid) then begin
         Key := #0;
         Perform(WM_NEXTDLGCTL, 0, 0);
      end else if (ActiveControl is TDBGrid) then
      with TDBGrid(ActiveControl) do
         if selectedindex < (fieldcount -1) then
         selectedindex := selectedindex +1
      else
         selectedindex := 0;
end;
ou isso:
if Key = VK_RETURN then Perform(Wm_NextDlgCtl,0,0);
ou então: Enter funcionando como Tab em toda a aplicação
Uses
  Grids
procedure TForm1.MudarComEnter(var Msg: TMsg; var Handled: Boolean);
begin
  If not ((Screen.ActiveControl is TCustomMemo) or
  (Screen.ActiveControl is TCustomGrid) or
  (Screen.ActiveForm.ClassName = 'TMessageForm')) then begin
     If Msg.message = WM_KEYDOWN then begin
        Case Msg.wParam of
        VK_RETURN,VK_DOWN : Screen.ActiveForm.Perform(WM_NextDlgCtl,0,0);
        VK_UP : Screen.ActiveForm.Perform(WM_NextDlgCtl,1,0);
        end;
     end;
  end;
end;
e no evento OnCreate o Form Principal digite a seguinte linha:
Application.OnMessage := MudarComEnter;

Abs.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...