Paulo Nobre Postado Outubro 20, 2004 Denunciar Share Postado Outubro 20, 2004 Estou usando este código para trocar tab por enterif key = #13 thenbeginPerform(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.ObrigadoPaulo Nobre Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Outubro 20, 2004 Denunciar Share Postado Outubro 20, 2004 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 More sharing options...
0 Paulo Nobre Postado Outubro 20, 2004 Autor Denunciar Share Postado Outubro 20, 2004 Entãoo certo seria Perform(WM_NextDlgCtl,0,0);? Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Outubro 20, 2004 Denunciar Share Postado Outubro 20, 2004 Olá Paulo.Você uma desses dicas tambem:Substituindo TAB pelo ENTERprocedure 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 More sharing options...
0 Paulo Nobre Postado Outubro 20, 2004 Autor Denunciar Share Postado Outubro 20, 2004 Valeu, Program amadorPaulo Nobre Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Paulo Nobre
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