DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
OSMAR
 

País: Brasil
Estado: AL
Cidade: Carneiros
Mensagens: 118
 Postado em: 21/7/2011 6:53:46 PM

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;
MARCO ANTONIO SALLES
 
 
 


País: Brasil
Estado: MG
Cidade: Muriae
Mensagens: 1679
 Postado em: 22/7/2011 8:15:03 AM
Mas qual o problema e quela o codigo que vc fez quando se refere a adaptar para que funcione nos dois memos?





 
Eliel Martins
 

País: Brasil
Estado: GO
Cidade: Goiânia
Mensagens: 101
 Postado em: 22/7/2011 8:42:58 AM
  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 ?

#Código

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.

#Código

  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.
#Código

  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.

#Código

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := MudarComEnter;
end;


  Espero ter ajudado.

  Eliel G. Martins Thumbs Up



  

 
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03