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 

Teclas apertadas

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


Registrado: Domingo, 31 de Março de 2013
Mensagens: 66

MensagemEnviada: Dom Mai 26, 2013 3:33 pm    Assunto: Teclas apertadas Responder com Citação

Como eu posso saber se o usuário apertou uma certa combinação de letras no teclado ao mesmo tempo? (Ex: Saber se o usuário apertou as teclas D+J+L ao mesmo tempo). Eu só consigo fazer as teclas ctrl, shift, etc + alguma letra funcionarem, mas duas ou mais letras ao mesmo tempo não.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
cyberdisk
Colaborador
Colaborador


Registrado: Domingo, 4 de Julho de 2010
Mensagens: 2391
Localização: São José dos Campos - SP

MensagemEnviada: Dom Mai 26, 2013 3:56 pm    Assunto: Responder com Citação

qual seria o objetivo disso ?
_________________
O conhecimento abre muitas portas
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
miguel135
Novato
Novato


Registrado: Domingo, 31 de Março de 2013
Mensagens: 66

MensagemEnviada: Dom Mai 26, 2013 4:07 pm    Assunto: Responder com Citação

estou tentando fazer um pequeno jogo no delphi em que se tem q fazer combinações de letras para tal coisa aconteça
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
cyberdisk
Colaborador
Colaborador


Registrado: Domingo, 4 de Julho de 2010
Mensagens: 2391
Localização: São José dos Campos - SP

MensagemEnviada: Dom Mai 26, 2013 4:19 pm    Assunto: Responder com Citação

Veja esse exemplo:

Capturar teclas digitadas no teclado
Código:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
    TForm1 = class(TForm)
    Memo1: TMemo;
    Timer1: TTimer;
    Timer2: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    private
    public
    end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
var  F:Textfile;
procedure TForm1.Timer1Timer(Sender: TObject);
var
      i : byte;
begin
  for i:=8 To 222 do
    begin
       if GetAsyncKeyState(i)=-32767 then
        begin
        case i of
        8  : memo1.Lines[memo1.Lines.count-1] := copy(memo1.Lines[memo1.Lines.count-1],1,length(memo1.Lines[memo1.Lines.count-1])-1); //Backspace
        9  : memo1.text:=memo1.text+'[Tab]';
        13 : memo1.text:=memo1.text+#13#10; //Enter
        17 : memo1.text:=memo1.text+'[Ctrl]';
        27 : memo1.text:=memo1.text+'[Esc]';
        32 :memo1.text:=memo1.text+' '; //Space
        33 : memo1.text := Memo1.text + '[Page Up]';
        34 : memo1.text := Memo1.text + '[Page Down]';
        35 : memo1.text := Memo1.text + '[End]';
        36 : memo1.text := Memo1.text + '[Home]';
        37 : memo1.text := Memo1.text + '[Left]';
        38 : memo1.text := Memo1.text + '[Up]';
        39 : memo1.text := Memo1.text + '[Right]';
        40 : memo1.text := Memo1.text + '[Down]';
        44 : memo1.text := Memo1.text + '[Print Screen]';
        45 : memo1.text := Memo1.text + '[Insert]';
        46 : memo1.text := Memo1.text + '[Del]';
        145 : memo1.text := Memo1.text + '[Scroll Lock]';

        //Number 1234567890 Symbol !@#$%^&*()
        48 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+')'
             else memo1.text:=memo1.text+'0';
        49 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'!'
             else memo1.text:=memo1.text+'1';
        50 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'@'
             else memo1.text:=memo1.text+'2';
        51 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'#'
             else memo1.text:=memo1.text+'3';
        52 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'$'
             else memo1.text:=memo1.text+'4';
        53 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'%'
             else memo1.text:=memo1.text+'5';
        54 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'^'
             else memo1.text:=memo1.text+'6';
        55 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'&'
             else memo1.text:=memo1.text+'7';
        56 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'*'
             else memo1.text:=memo1.text+'8';
        57 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'('
             else memo1.text:=memo1.text+'9';
        65..90 : // a..z , A..Z
            begin
            if ((GetKeyState(VK_CAPITAL))=1) then
                if GetKeyState(VK_SHIFT)<0 then
                   memo1.text:=memo1.text+LowerCase(Chr(i)) //a..z
                else
                   memo1.text:=memo1.text+UpperCase(Chr(i)) //A..Z
            else
                if GetKeyState(VK_SHIFT)<0 then
                    memo1.text:=memo1.text+UpperCase(Chr(i)) //A..Z
                else
                    memo1.text:=memo1.text+LowerCase(Chr(i)); //a..z
            end;
        //Numpad
        96..105 : memo1.text:=memo1.text + inttostr(i-96); //Numpad  0..9
        106:memo1.text:=memo1.text+'*';
        107:memo1.text:=memo1.text+'&';
        109:memo1.text:=memo1.text+'-';
        110:memo1.text:=memo1.text+'.';
        111:memo1.text:=memo1.text+'/';
        144 : memo1.text:=memo1.text+'[Num Lock]';

        112..123: //F1-F12
            memo1.text:=memo1.text+'[F'+IntToStr(i - 111)+']';

        186 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+':'
              else memo1.text:=memo1.text+';';
        187 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'+'
              else memo1.text:=memo1.text+'=';
        188 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'<'
              else memo1.text:=memo1.text+',';
        189 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'_'
              else memo1.text:=memo1.text+'-';
        190 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'>'
              else memo1.text:=memo1.text+'.';
        191 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'?'
              else memo1.text:=memo1.text+'/';
        192 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'~'
              else memo1.text:=memo1.text+'`';
        219 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'{'
              else memo1.text:=memo1.text+'[';
        220 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'|'
              else memo1.text:=memo1.text+'\';
        221 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'}'
              else memo1.text:=memo1.text+']';
        222 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'"'
              else memo1.text:=memo1.text+'''';
        end;
        end;
    end;
end;



procedure TForm1.Timer2Timer(Sender: TObject);
begin
        Assignfile(F,'Salvo.txt');
        if not FileExists('Salvo.txt') Then
        begin
            Rewrite(F);
            Closefile(F);
        End
        Else
            Assignfile(F,'Salvo.txt');
        {$I-}
        Append(F);
        {$I+}
        If IOResult<> 0 Then
        Begin
            ShowMessage('-');
        End;
        Write(F,Memo1.Text);
        Memo1.Clear;
        Closefile(F);
end;


end.


abraço
_________________
O conhecimento abre muitas portas
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
miguel135
Novato
Novato


Registrado: Domingo, 31 de Março de 2013
Mensagens: 66

MensagemEnviada: Dom Mai 26, 2013 4:29 pm    Assunto: Responder com Citação

nao entendi muito bem esse codigo, poderia me explicar?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
cyberdisk
Colaborador
Colaborador


Registrado: Domingo, 4 de Julho de 2010
Mensagens: 2391
Localização: São José dos Campos - SP

MensagemEnviada: Dom Mai 26, 2013 4:36 pm    Assunto: Responder com Citação

(Ex: Saber se o usuário apertou as teclas D+J+L ao mesmo tempo)

Esse código vai dar a voce uma noção de como capturar as teclas digitadas no teclado

voce deve fazer as modificações necessarias para o seu uso ... ok ?

OBS: execute esse código ... voce vai perceber que cada tecla digitada irá aparecer num Memo

abraço
_________________
O conhecimento abre muitas portas
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
miguel135
Novato
Novato


Registrado: Domingo, 31 de Março de 2013
Mensagens: 66

MensagemEnviada: Dom Mai 26, 2013 4:37 pm    Assunto: Responder com Citação

nao teria uma forma mais simples de saber se o cara apertou as teclas D+J+L juntas?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
cyberdisk
Colaborador
Colaborador


Registrado: Domingo, 4 de Julho de 2010
Mensagens: 2391
Localização: São José dos Campos - SP

MensagemEnviada: Dom Mai 26, 2013 4:40 pm    Assunto: Responder com Citação

voce pode limitar o escopo de teclas ... vai da sua necessidade

existem outras maneiras, mas de uma forma ou outra, voce tera que testar quais foram as teclas digitadas ( então voce terá que saber qual é o código asc da tecla )

abraço
_________________
O conhecimento abre muitas portas
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Dom Mai 26, 2013 6:29 pm    Assunto: Responder com Citação

É um código meio estranho (rsrs), mas ái vai:
Código:
  case Key of
    Ord('D'):
      if ((GetKeyState(Ord('J')) and $80) = $80) and ((GetKeyState(Ord('L')) and $80) = $80) then
        ShowMessage('combo');
    Ord('J'):
      if ((GetKeyState(Ord('D')) and $80) = $80) and ((GetKeyState(Ord('L')) and $80) = $80) then
        ShowMessage('combo');
    Ord('L'):
      if ((GetKeyState(Ord('J')) and $80) = $80) and ((GetKeyState(Ord('D')) and $80) = $80) then
        ShowMessage('combo');
  end;

Lembre-se de alterar a propridade KeyPreview do formulário para True.

Créditos ao todo-poderoso Stack Overflow:
http://stackoverflow.com/questions/14926453/delphi-detect-pressing-3-keys-at-the-same-time
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
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