ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Tab no OnShow (keybd_event), e tab+ctrl ??? [Resolvido]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
eudiclei
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 23 de Março de 2005
Mensagens: 178

MensagemEnviada: Seg Mar 19, 2018 11:11 am    Assunto: Tab no OnShow (keybd_event), e tab+ctrl ??? [Resolvido] Responder com Citação

Olá amigos,

Para dá um tab ao mostra a janela é colocado no onshow:

keybd_event (VK_Tab, 0,0,0);

e como faço para ser tab + ctrl?

Podem me ajudar?


Editado pela última vez por eudiclei em Ter Mar 20, 2018 12:44 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Seg Mar 19, 2018 12:01 pm    Assunto: Responder com Citação

Se quiser manter pressionado as teclas Tab + Ctrl:

Código:
  keybd_event(VK_TAB, 0, KEYEVENTF_EXTENDEDKEY or 0, 0); { Mantém pressionada TAB }
 
  keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY or 0, 0); { Mantém pressionada CTRL }

Não se esquecendo de liberar as teclas depois:

Código:
  keybd_event(VK_TAB, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); { Libera (solta) TAB }
 
  keybd_event(VK_CONTROL, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); { Libera (solta) CTRL }

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
eudiclei
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 23 de Março de 2005
Mensagens: 178

MensagemEnviada: Seg Mar 19, 2018 11:11 pm    Assunto: Responder com Citação

Deu certo, apesar de demorar pra descobrir que deveria usa o Shift e não o Ctrl.

Aí deu tudo certo. Obrigado!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ronaldgraff
Novato
Novato


Registrado: Quinta-Feira, 23 de Fevereiro de 2012
Mensagens: 29

MensagemEnviada: Qua Dez 04, 2019 11:25 am    Assunto: Responder com Citação

natanbh1 escreveu:
Se quiser manter pressionado as teclas Tab + Ctrl:

Código:
  keybd_event(VK_TAB, 0, KEYEVENTF_EXTENDEDKEY or 0, 0); { Mantém pressionada TAB }
 
  keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY or 0, 0); { Mantém pressionada CTRL }

Não se esquecendo de liberar as teclas depois:

Código:
  keybd_event(VK_TAB, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); { Libera (solta) TAB }
 
  keybd_event(VK_CONTROL, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); { Libera (solta) CTRL }


Talvez você possa me ajudar.
Eu estou com um problema pra utilizar dois atalhos, CTRL + F3 e somente F3

Quando pressiono Ctrl+F3 ele tbm executa o F3, tentei ignorar o F3 quando o control estiver pressionado, o que funciona, só que depois de pressionar CTRL ele fica "pressionado" e preciso apertar a tecla novamente pra liberar o evento da memoria.
Tentei usar o keybd_event sugerido acima, mas não funcionou.
Alguma informação que possa me ajudar que eu desconheça??
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qua Dez 04, 2019 2:46 pm    Assunto: Responder com Citação

Teste essa abordagem, criando atalhos para F3 e CTRL+F3:

Na seção private declare esta procedure:

Código:
private
    { Private declarations }
    procedure WMHotkey(var Msg: TWMHotkey); message WM_HOTKEY;


Abaixo na seção Implementation coloque a procedure:

Código:
procedure TForm1.WMHotkey(var Msg: TWMHotkey);
begin
  case Msg.HotKey of
    1:
      ShowMessage('Pressionadas as teclas CTRL+F3');
    2:
      ShowMessage('Pressionada a tecla F3');
  end;
end;


No evento OnCreate, registre os atalhos:

Código:
procedure TForm1.FormCreate(Sender: TObject);
begin
  if not RegisterHotkey(Handle, 1, MOD_CONTROL, VK_F3) then
    ShowMessage('Erro ao programar Ctrl+F3');

  if not RegisterHotkey(Handle, 2, MOD_NOREPEAT, VK_F3) then
    ShowMessage('Erro ao programar F3');
end;


No evento OnDestroy, remova o registro dos atalhos:

Código:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotkey(Handle, 1);
  UnRegisterHotkey(Handle, 2);
end;


Fonte: http://www.tecnobyte.com.br/1238112/Delphi-Teclado-e-Mouse
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB