nightmare Postado Fevereiro 6, 2005 Denunciar Share Postado Fevereiro 6, 2005 Como faço para que quando eu apente ctrl+N ele simule um clique no botão novo??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nightmare Postado Fevereiro 7, 2005 Autor Denunciar Share Postado Fevereiro 7, 2005 Aguem por favor me responde essa pergunta!!!!!!to precisando muito dessa ajuda... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Fevereiro 8, 2005 Denunciar Share Postado Fevereiro 8, 2005 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 macks Postado Fevereiro 9, 2005 Denunciar Share Postado Fevereiro 9, 2005 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+++++++++++ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Fevereiro 9, 2005 Denunciar Share Postado Fevereiro 9, 2005 Olá macks, tem a ver sim e você pode controlar através da propriedade Active de TApplication.Na procedure TForm1.WmHotKey(var Msg:TMessage); coloque antes do Case:if not Application.Active then Exit; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 macks Postado Fevereiro 10, 2005 Denunciar Share Postado Fevereiro 10, 2005 vlw s3c eu não sabia não cara.......valeu a dica cara........ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Fevereiro 15, 2005 Denunciar Share Postado Fevereiro 15, 2005 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Fevereiro 15, 2005 Denunciar Share Postado Fevereiro 15, 2005 Olá,Poderia usar assim tambem:Defina a propriedade KeyPreview do form como TRUE.e no evento OnKeyDown do form:if (Shift = [ssCtrl]) then case Key of 78: BtnNovoClick(Sender); // 78 = código ascii da tecla 'N' end;(CTRL+N)Abs. Progr'amador. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Fevereiro 15, 2005 Denunciar Share Postado Fevereiro 15, 2005 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+aRegisterHotKey(Handle, 2, MOD_CONTROL, $58); // Ctrl+xprocedure 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Fevereiro 15, 2005 Denunciar Share Postado Fevereiro 15, 2005 Olá, s3cIsso mesmo que eu queria.Valeu pela explicação.Obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Abril 6, 2005 Denunciar Share Postado Abril 6, 2005 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Abril 6, 2005 Denunciar Share Postado Abril 6, 2005 Olá Paulo,acima eu postei uma dica que é bem simples mas funciona, e continuo insistindo com essa dica! // representa o Ctrl+Shift+Nprocedure 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Abril 6, 2005 Denunciar Share Postado Abril 6, 2005 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Abril 6, 2005 Denunciar Share Postado Abril 6, 2005 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Abril 6, 2005 Denunciar Share Postado Abril 6, 2005 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
nightmare
Como faço para que quando eu apente ctrl+N ele simule um clique no botão novo???
Link para o comentário
Compartilhar em outros sites
14 respostass a esta questão
Posts Recomendados
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.