Pressionamento de teclas, o dilema....
Olá a todos do fórum.
Gostaria de saber como posso proceder para detectar o pressionamento das teclas listadas abaixo em um form, quando pressionar as teclas aparerá uma mensagem box...
DEL, Backspace e Shift+TAB
Gostaria tbm de saber um código pra alterar a passagem de campos do Tab para a tecla ENTER... Obrigado!!!
Gostaria de saber como posso proceder para detectar o pressionamento das teclas listadas abaixo em um form, quando pressionar as teclas aparerá uma mensagem box...
DEL, Backspace e Shift+TAB
Gostaria tbm de saber um código pra alterar a passagem de campos do Tab para a tecla ENTER... Obrigado!!!
Gtts
Curtidas 0
Respostas
Joe_wah
12/01/2006
a primeira questão não posso te ajudar mas na segunda uma idéia seria para cada componente(edits e etc) colocar no Evento OnKeyPress para passar o foco para o componente seguinte. Tipo
OnKeyPressEdit1
se key igual a enter
Edit2.SetFocus;
OnKeyPressEdit1
se key igual a enter
Edit2.SetFocus;
GOSTEI 0
Adriano Santos
12/01/2006
Ativa o enter para funcionar como Tab
Para a primeira questao.
Não testei, mas acredito que funcione.
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin Perform(WM_NextDlgCtl, 0, 0); end; //Ative a propriedade KeyPreview do Form
Para a primeira questao.
Não testei, mas acredito que funcione.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_DELETE then //Del ShowMessage(´DELETE´) else if Key = 8 then //BackSpace ShowMessage(´BACKSPACE´) else if (ssShift in Shift) and (Key = VK_TAB) then //Shift+TAB ShowMessage(´TAB´) // DEL, Backspace e Shift+TAB end;
GOSTEI 0
Adriano Santos
12/01/2006
Uma correção:
O Shift+TAB não pode ser detectado no onKeyDown do Form então coloque tudo no onKeyUp
[quote:602aa85a23=´Adriano Santos´]
[/quote:602aa85a23]
Desculpe o engano.
O Shift+TAB não pode ser detectado no onKeyDown do Form então coloque tudo no onKeyUp
[quote:602aa85a23=´Adriano Santos´]
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_DELETE then //Del ShowMessage(´DELETE´) else if Key = 8 then //BackSpace ShowMessage(´BACKSPACE´) else if (ssShift in Shift) and (Key = VK_TAB) then ShowMessage(´SHIFT + TAB´); // DEL, Backspace e Shift+TAB end;
[/quote:602aa85a23]
Desculpe o engano.
GOSTEI 0
Romulocpd
12/01/2006
Adriano,
Por falar nisso me tira uma dúvida boba que nao lembro nem a raio.
No form pai do meu sistema eu tenho o codigo no keypress simples de:
Desculpe o blá blá mas é q Delphi só em casa.... :cry:
Como faço o contrário? Gostaria de em determinados momentos no sistema Tecla UP ele fazer um Shift+Tab e Tecla Down um Tab.
Vlw!!
Por falar nisso me tira uma dúvida boba que nao lembro nem a raio.
No form pai do meu sistema eu tenho o codigo no keypress simples de:
if Key = 0 then begin Key := #0; Perform(wm_dialog nao sei das quantas, 1 ,1); end;
Desculpe o blá blá mas é q Delphi só em casa.... :cry:
Como faço o contrário? Gostaria de em determinados momentos no sistema Tecla UP ele fazer um Shift+Tab e Tecla Down um Tab.
Vlw!!
GOSTEI 0
Adriano Santos
12/01/2006
Adriano,
Por falar nisso me tira uma dúvida boba que nao lembro nem a raio.
No form pai do meu sistema eu tenho o codigo no keypress simples de:
Desculpe o blá blá mas é q Delphi só em casa.... :cry:
Como faço o contrário? Gostaria de em determinados momentos no sistema Tecla UP ele fazer um Shift+Tab e Tecla Down um Tab.
Vlw!!
if Key = 0 then begin Key := #0; Perform(wm_dialog nao sei das quantas, 1 ,1); end;
Sem problemas meu velho. Faça o seguinte:
Pelo que entendi vc quer que ao pressionar para baixo ele vai para o prox controle, para cima controle anterior certo?
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_DOWN then Perform(WM_NextDlgCtl, 0, 0) //Proximo controle else if Key = VK_UP then Perform(WM_NextDlgCtl, 1, 0); //Controle anterior end;
GOSTEI 0
Adriano Santos
12/01/2006
Fiz um componente para este propósito, assim modifico apenas as propriedades dele e pronto, o sistema todo já está mudado:
procedure TDcTabEnter.Execute(var Msg: TMsg; var Handled: Boolean); begin if FAtivo then begin if not ((Screen.ActiveControl is TCustomMemo) or (Screen.ActiveControl is TCustomGrid) or (Screen.ActiveControl is TButton) or (Screen.ActiveControl is TBitBtn) 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 else Application.OnMessage := Nil; end;
GOSTEI 0
Romulocpd
12/01/2006
Adriano,
Isso mesmo!
Show! Valeu!
Eu ainda fiz um esquema bem legal. No meu form principal, pai de todos, antes de aplicar as regras de teclado eu verifico se o Tag do ActiveControl está zero.
Daí nos controles que eu nao quero este comportamento eu controlo pelo Tag. Ficou bem legal.
Valeu!!!!!!
Isso mesmo!
Show! Valeu!
Eu ainda fiz um esquema bem legal. No meu form principal, pai de todos, antes de aplicar as regras de teclado eu verifico se o Tag do ActiveControl está zero.
Daí nos controles que eu nao quero este comportamento eu controlo pelo Tag. Ficou bem legal.
Valeu!!!!!!
GOSTEI 0
Romulocpd
12/01/2006
Show cara!!!!
Valeu! Vou adaptar pra minha realidade aqui.l
Valeu! Vou adaptar pra minha realidade aqui.l
GOSTEI 0
Adriano Santos
12/01/2006
Aguarde que tem um ´mini-curso´ de componentes que vai pintar na página inicial do Clube, estou preparando alguns artigos pra galera.
Abraço
Abraço
GOSTEI 0
Gtts
12/01/2006
ok, funcionando o procedimento mas o problema é que quando pressionada por exemplo a tecla backspace, na palavra Gabriel, o ´l´ é apagado, e gostaria que não apagasse, tipo bloquear, ou tirar a fuñção de apagar, alguém conhece uma forma de fazer isso?
Obrigado.
Obrigado.
GOSTEI 0
Adriano Santos
12/01/2006
ok, funcionando o procedimento mas o problema é que quando pressionada por exemplo a tecla backspace, na palavra Gabriel, o ´l´ é apagado, e gostaria que não apagasse, tipo bloquear, ou tirar a fuñção de apagar, alguém conhece uma forma de fazer isso?
Obrigado.
Como assim? Qual ação que vc deseja para o BackSpace?
GOSTEI 0
Gtts
12/01/2006
queria na verdade q quando o usuário pressionasse a tecla não fosse apagado caracteres, no caso não efetuasse nenhuma operação... vlw
GOSTEI 0
Adriano Santos
12/01/2006
queria na verdade q quando o usuário pressionasse a tecla não fosse apagado caracteres, no caso não efetuasse nenhuma operação... vlw
Hummmm, entendi, embora não ache que seja uma boa prática :D, mas você pode detectar a tecla backspace e passar o valor nulo pra ela.
Veja:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key = #8 then //backspace Key := 0; //caracter nulo end;
GOSTEI 0
Martins
12/01/2006
[quote:d83920b195=´Adriano Santos´]
Hummmm, entendi, embora não ache que seja uma boa prática :D, mas você pode detectar a tecla backspace e passar o valor nulo pra ela.
Veja:
[/quote:d83920b195]
A não ser que seja por uma boa razão, fica meio sem sentido, e nesse caso seria melhor q o controle ao receber o foco ou ao completar um quantidade limite de caracteres ficasse em modo somente leitura.
Mas tudo bem, siga a instrução acima.
boa sorte
queria na verdade q quando o usuário pressionasse a tecla não fosse apagado caracteres, no caso não efetuasse nenhuma operação... vlw
Hummmm, entendi, embora não ache que seja uma boa prática :D, mas você pode detectar a tecla backspace e passar o valor nulo pra ela.
Veja:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key = #8 then //backspace Key := 0; //caracter nulo end;
A não ser que seja por uma boa razão, fica meio sem sentido, e nesse caso seria melhor q o controle ao receber o foco ou ao completar um quantidade limite de caracteres ficasse em modo somente leitura.
Mas tudo bem, siga a instrução acima.
boa sorte
GOSTEI 0
Adriano Santos
12/01/2006
Então [b:715ddb0bd0]Martins[/b:715ddb0bd0], não sei para que o [b:715ddb0bd0]gtts[/b:715ddb0bd0] precisa disso, mas existem inúmeras maneiras de fazê-lo. É isso ai meu filho...rsrs.
GOSTEI 0