Ir para conteúdo
Fórum Script Brasil
  • 0

Teclas De Atalho


nightmare

Pergunta

14 respostass a esta questão

Posts Recomendados

  • 0

Olá colega, defina:

    procedure WmHotKey(var Msg:TMessage); message WM_HOTKEY;
Depois:
procedure TForm1.WmHotKey(var Msg:TMessage);
begin
  Case Msg.WParam of
    1 : Button1Click(Button1);
  end;
end;
No onCreate e onDestroy:
procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, 1, MOD_CONTROL, $4e);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnregisterHotKey(Handle, 1);
end;

Com isto, mesmo sua aplicação estando fora de foco o Ctrl+N executará o clique do botão porque a tecla de atalho é registrada em todo o Windows.

Coloquei um Case no método da mensagem porque você pode registrar várias teclas de atalho.

Link para o comentário
Compartilhar em outros sites

  • 0

cara mas vale lembrar que se o aplicativo estiver aberto ....e se ele tiver navegando em outro aplicativo.......o atalho fucionara mesmo assim.....por isso fica meio complicado..........eu também queria saber como abiliria o comando somente para o aplicativo em questão.....ou se o que esto dizendo não tem nada haver....

valeu e t+++++++++++

Link para o comentário
Compartilhar em outros sites

  • 0

s3c,olá.

Umapergunta:Isso funciona também para os dois tipos de menus(normal e contexto)?

Por exemplo, se tenho um programa que funciona no tray e um dos menus se chama mnuAbrir,poderia colocar:

procedure TForm1.WmHotKey(var Msg:TMessage);

begin

Case Msg.WParam of

1 : mnuAbrir.Click(mnuAbrir);

end;

end;

funcionaria?

Se sim creio que mesmo o programa estando Hide, também abriria, não ?

Outra pergunta seria: Existiria um código semelhante ao seu para chamar um exe?

Naturalmente com o exe fechado.

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Paulo,

Umapergunta:Isso funciona também para os dois tipos de menus(normal e contexto)?

Funciona porque RegisterHotKey registra a tecla na fila de msgs do Windows.

Quando uma tecla é pressionada, o Windows verifica se a tecla casa com as teclas registradas, se sim ele manda uma msg do tipo WM_HotKey p/ a fila de msgs da thread que a registrou, que no caso seria a thread principal do seu aplicativo. É por isso que você tem que definir a procedure de mensagem do tipo WM_HotKey, para pegar a msg enviada pelo Windows. Só falha quando você tenta registrar a mesma tecla mais de uma vez.

Existiria um código semelhante ao seu para chamar um exe?

Naturalmente com o exe fechado.

você pode usar o ShellExecute, ex:

uses ShellApi,

RegisterHotKey(Handle, 1, MOD_CONTROL, $41); // Ctrl+a

RegisterHotKey(Handle, 2, MOD_CONTROL, $58); // Ctrl+x

procedure TForm1.WmHotKey(var Msg:TMessage);

var Dir:array[0..Max_Path] of Char; sExe:String;

begin

Case Msg.WParam of

1 : mnuAbrir.Click(mnuAbrir);

2 : begin

GetWindowsDirectory(@Dir, Max_Path);

sExe := StrPas(Dir)+'\NotePad.exe';

ShellExecute(Handle, 'Open', PChar(sExe), nil, nil, SW_Show);

end;

end;

end;

Link para o comentário
Compartilhar em outros sites

  • 0

Neste tópico o s3c nos mostrou como criar as teclas de atalho para comandos.

Os exemplos dados foram para o caso de usar CTRL + A e CTRL + X.

E caso eu quisesse CTRL + SHIFT + A ou CTRL + SHIFT + @, onde o código hexadecimal de arroba é 40?

Onde eu deveria fazer a alteração no código ecomo?

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Paulo,

acima eu postei uma dica que é bem simples mas funciona, e continuo insistindo com essa dica! tongue.gif

// representa o Ctrl+Shift+N

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (Shift = [ssCtrl,ssShift]) then
 case Key of
   78: ShowMessage('Deu Certo');  // 78 = código ascii da tecla 'N'
 end;
end; 

Abs. Progr'amador. wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Progr'amador,

estou no trabalho e sem o delphi.

Você poderia me dizer se esse código funciona para programas que estão rodando no tray?

Este comando seria usado para fazer aparecer o ícone no tray.(Ele estaria oculto: rxlibtray.active:= false)

Consegui fazer isso com o código apresentado pelo s3c para CTRL + Letra, mas gostaria de adaptar para CTRL + SHIFT + Letra(arroba por exemplo). Por isso insisti naquele caminho, pois quando você postou sua resposta, já estava testando em cima da resposta dada por ele para o colega que iniciou o tópico.

De qualquer forma vou tentar colocar seu código, mas se você souber me passa o código para adaptar o outro jeito.

A propósito qual seria a diferença de um código para o outro? Se o seu é muito mais fácil, para que existe o outro? Em alguma situação só poderíamos usar o outro?

Você e o s3c poderiam esclarecer isto?

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Paulo,

A propósito qual seria a diferença de um código para o outro? Se o seu é muito mais fácil, para que existe o outro? Em alguma situação só poderíamos usar o outro?
A diferença é que RegisterHotKey registra a tecla p/ o Windows não importando se sua aplicação está em foco ou não; ao contrário do código exposto pelo colega Progr'amador em que sua janela deve receber o foco p/ poder interceptar a tecla.
mas gostaria de adaptar para CTRL + SHIFT + Letra(arroba por exemplo).
Ao invés de Mod_Control, coloque Mod_Control+Mod_Shift; e o arroba (em cima do 2) é a tecla $32;note que não é o valor ascii do "@" e sim o código da tecla do teclado.
Link para o comentário
Compartilhar em outros sites

  • 0

Olá s3c,

Entendi perfeitamente.

Então,no meu caso tem que ser desta forma, pois nem sempre terei o foco,até porque, uso a tecla de atalho para fazer aparecer um ícone que não está ativo.

Já havia funcionado,mas queria saber como fazia com o shift.

Obrigado

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...