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;
Osmar

Osmar

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 ?

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar