Fórum Tab por Enter #312578
10/02/2006
0
procedure TF1Solicitacao.DBECodproKeyPress(Sender: TObject; var Key: Char); begin if (Key = #13) then begin SelectNext(Sender as tWinControl, True, True); Key := 0; end; end;
Felipeiw
Curtir tópico
+ 0Posts
10/02/2006
Leonardobhbr
SelectNext(Sender as tWinControl, True, True);
eu uso
Perform(WM_NEXTDLGCTL,0,0);
mais eu acho q nao tem nada ver o que vc tem que ver é o seguinte se for windows xp por padrao checkbox radiobutton não são marcados quando selecionado para fazer que funcione igual o 98 voce terá que ir em propriedades de video\aparencia\efeitos\ e desmarcar Olcutar sublinhados para navegação do teclado ate eu apertar a tecla alt
Gostei + 0
10/02/2006
Felipeiw
abs
Gostei + 0
16/07/2006
Aerreira
Gostei + 0
17/07/2006
Micheus
no RadioGroup não há o evento keypress, talvez seja a isso que vc se refere quando diz que não funciona (não entendi direito).
No seu código, troque apenas o Sender por ActiveControl:
Acho que a solução para este procedimento seria bastante simplifica se as teclas fossem tratadas no evento OnKeyPress do form e não o de cada componente - já que vc quer substituir o padrão de movimentação de TAB para ENTER.
Gostaria de sugirir o seguinte:
1) Em cada form que vc quizer utilizar este recurso, configure a propriedade KeyPreview = True; Com isto toda tecla pressionada, neste form quando ativo, será enviada para ele;
2) Escreva o procedimento OnKeyPress do form:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin if (ActiveControl is TMemo) or (ActiveControl is TRichEdit) then Exit; SelectNext(ActiveControl, True, True); Key := 0; end; end;
Este procedimento funcionou perfeitamente num form com Rich, Memo, Buttons, Checkbox, RadioGroup e até com o RadioButton - após setar a propriedade TabStop = True; Alias, esta propriedade determinará quem será posionado na seqüência, conforme parâmetro em SelectNext.
Mas...: Já que a idéia é mover-se por toda a tela utilizando o ENTER, acho que seria interessante amplicar o ´poder´ deste recurso. Que tal incluirmos , na verificação, o PageControl? Vai uma opção:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); var NextCtrl :TWinControl; begin if Key = #13 then begin Key := 0; if (ActiveControl is TMemo) or (ActiveControl is TRichEdit) then Exit; // verificamos se o componente ativo está colocado num TabSheet, // se for o caso... if ActiveControl.Parent is TTabSheet then begin // vamos obter o próximo componente na ordem normal de ativação. NextCtrl := FindNextControl(ActiveControl, True, True, False); // Se o componente atual for o último no TabSheet, isto resultará // em um componente fora do PageControl, então... // Selecionamos a próxima guia - TabSheet if NextCtrl.Parent <> ActiveControl.Parent then begin (ActiveControl.Parent.Parent as TPageControl).SelectNextPage(True, True); // Não fazemos mais nada. Já está posiconado no // 1º compontente do TabSheet Exit; end; end; SelectNext(ActiveControl, True, True); end; end;
Gostei + 0
17/07/2006
Aerreira
Dá sim, veja o código que postei nesse tópico: http://forum.clubedelphi.net/viewtopic.php?t=71066
Gostei + 0
17/07/2006
Micheus
Observe que o componente apenas troca o ENTER pelo TAB, e que não é somente esta a proposta final do código postado. O avanço entre as guias (TabSheet) no PageControls, nem o TAB faz - ao chegar no último componente na guia, o foco sai do PageControl para o próximo componente no Form.
Gostei + 0
17/07/2006
Micheus
Observe que o componente apenas troca o ENTER pelo TAB, e que não é somente esta a proposta final do código postado. O avanço entre as guias (TabSheet) no PageControls, nem o TAB faz - ao chegar no último componente na guia, o foco sai do PageControl para o próximo componente no Form. :o
[]s
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)