| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
miguel135 Novato

Registrado: Domingo, 31 de Março de 2013 Mensagens: 66
|
Enviada: Dom Mai 26, 2013 3:33 pm Assunto: Teclas apertadas |
|
|
| 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 |
|
 |
cyberdisk Colaborador

Registrado: Domingo, 4 de Julho de 2010 Mensagens: 2391 Localização: São José dos Campos - SP
|
Enviada: Dom Mai 26, 2013 3:56 pm Assunto: |
|
|
qual seria o objetivo disso ? _________________ O conhecimento abre muitas portas |
|
| Voltar ao Topo |
|
 |
miguel135 Novato

Registrado: Domingo, 31 de Março de 2013 Mensagens: 66
|
Enviada: Dom Mai 26, 2013 4:07 pm Assunto: |
|
|
| 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 |
|
 |
cyberdisk Colaborador

Registrado: Domingo, 4 de Julho de 2010 Mensagens: 2391 Localização: São José dos Campos - SP
|
Enviada: Dom Mai 26, 2013 4:19 pm Assunto: |
|
|
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 |
|
 |
miguel135 Novato

Registrado: Domingo, 31 de Março de 2013 Mensagens: 66
|
Enviada: Dom Mai 26, 2013 4:29 pm Assunto: |
|
|
| nao entendi muito bem esse codigo, poderia me explicar? |
|
| Voltar ao Topo |
|
 |
cyberdisk Colaborador

Registrado: Domingo, 4 de Julho de 2010 Mensagens: 2391 Localização: São José dos Campos - SP
|
Enviada: Dom Mai 26, 2013 4:36 pm Assunto: |
|
|
(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 |
|
 |
miguel135 Novato

Registrado: Domingo, 31 de Março de 2013 Mensagens: 66
|
Enviada: Dom Mai 26, 2013 4:37 pm Assunto: |
|
|
| nao teria uma forma mais simples de saber se o cara apertou as teclas D+J+L juntas? |
|
| Voltar ao Topo |
|
 |
cyberdisk Colaborador

Registrado: Domingo, 4 de Julho de 2010 Mensagens: 2391 Localização: São José dos Campos - SP
|
Enviada: Dom Mai 26, 2013 4:40 pm Assunto: |
|
|
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 |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Dom Mai 26, 2013 6:29 pm Assunto: |
|
|
É 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 |
|
 |
|