Fórum Enter em dois DBmemo? #405400
21/07/2011
0
Amigos,
Estou tentando fazer com que o ENTER funcione em 2 dbmemo, o código abaixo funciona perfeitamente com 1 dbmemo, mas tenho 2 dbmemo um ao lado do outro, então tentei adaptar o código abaixo, só que ao tentar acabei causando problema no primeiro.
Quem poderia ajudar?
procedure TFrmCadTurDisc.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
Case Key of
VK_RETURN:
begin
If not DbMemo1.Focused then
Perform(WM_NEXTDLGCTL,0,0);
end;
end; end;
begin
Case Key of
VK_RETURN:
begin
If not DbMemo1.Focused then
Perform(WM_NEXTDLGCTL,0,0);
end;
end; end;
Osmar
Curtir tópico
+ 0
Responder
Posts
22/07/2011
Marco Salles
Mas qual o problema e quela o codigo que vc fez quando se refere a adaptar para que funcione nos dois memos?
Responder
Gostei + 0
22/07/2011
Eliel Martins
Olá Osmar!
O que eu pude verificar no seu código, é que você faz uma veirificação se o foco está no DBMemo1 (If not DbMemo1.Focused then) então quando o foco estiver no DBMemo1 o seu código não vai funcionar, utilizando o seu mesmo código você poderia fazer da seguinte maneira ?
Osmar, agora tenho uma sugestão para você, segue abaixo uma função para a tecla [Enter] funcionar no lugar do [TAB], nesse exmplo abaixo o enter vai funcionar somente dentro do DBMemo para quebrar a linha do DBMemo, ele não vai funcionar dentro do DBMemo para passar o foco para o proximo DBMemo.
Osmar, agora se você deseja que a tecla [Enter] funcione para passar o foco de um DBMemo para o outro, você utiliza este código logo abaixo.
No evento OnCreate do Form adicione o seguinte código.
Espero ter ajudado.
Eliel G. Martins
O que eu pude verificar no seu código, é que você faz uma veirificação se o foco está no DBMemo1 (If not DbMemo1.Focused then) então quando o foco estiver no DBMemo1 o seu código não vai funcionar, utilizando o seu mesmo código você poderia fazer da seguinte maneira ?
procedure TFrmCadTurDisc.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Case Key of VK_RETURN: begin Perform(WM_NEXTDLGCTL,0,0); end; end; end;
Osmar, agora tenho uma sugestão para você, segue abaixo uma função para a tecla [Enter] funcionar no lugar do [TAB], nesse exmplo abaixo o enter vai funcionar somente dentro do DBMemo para quebrar a linha do DBMemo, ele não vai funcionar dentro do DBMemo para passar o foco para o proximo DBMemo.
if not ((Screen.ActiveControl is TCustomGrid) or (Screen.ActiveControl is TCustomMemo) 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;
Osmar, agora se você deseja que a tecla [Enter] funcione para passar o foco de um DBMemo para o outro, você utiliza este código logo abaixo.
if not ((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;
No evento OnCreate do Form adicione o seguinte código.
procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage := MudarComEnter; end;
Espero ter ajudado.
Eliel G. Martins
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)