LucAlucard Postado Março 31, 2011 Denunciar Share Postado Março 31, 2011 Olá pessoal tudo bem? Bom... Hoje estou aqui novamente com mais uma dúvidasinha... Parece simples mas eu nãos sei =/.Como saber se 2 teclas estão precionadas? Por exemplo:Tenho um shape. Quando eu aperto:Seta pra cima ele sobeSeta pra Esquerda ele Vai indo pra EsquerdaComo fazer ele ir pras duas direções? Capturar o key das duas.. quando eu apertar o key para a esquerda e cima? Alguém sabe? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Março 31, 2011 Denunciar Share Postado Março 31, 2011 Como fazer ele ir pras duas direções? Capturar o key das duas.. quando eu apertar o key para a esquerda e cima? Alguém sabe?basta apertar as 2 teclas ao mesmo tempoprocedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key OF VK_LEFT : Shape1.Left := Shape1.Left -5; VK_UP : Shape1.Top := Shape1.Top -5; VK_RIGHT : Shape1.Left := Shape1.Left +5; VK_DOWN : Shape1.Top := Shape1.Top +5; end; end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Março 31, 2011 Autor Denunciar Share Postado Março 31, 2011 Como fazer ele ir pras duas direções? Capturar o key das duas.. quando eu apertar o key para a esquerda e cima? Alguém sabe?basta apertar as 2 teclas ao mesmo tempoprocedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key OF VK_LEFT : Shape1.Left := Shape1.Left -5; VK_UP : Shape1.Top := Shape1.Top -5; VK_RIGHT : Shape1.Left := Shape1.Left +5; VK_DOWN : Shape1.Top := Shape1.Top +5; end; end;abraçoNão funciona. Quando você aperta digamos.. seta pra esquerda ele vai pra esqeurda e depois ainda matendo a seta pra esquerda apertada aperta a seta pra cima ele só vai pra sima e não vai pra diagonal entende? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Março 31, 2011 Denunciar Share Postado Março 31, 2011 Não funciona. Quando você aperta digamos.. seta pra esquerda ele vai pra esqeurda e depois ainda matendo a seta pra esquerda apertada aperta a seta pra cima ele só vai pra sima e não vai pra diagonal entende?não é assim o funcionamento .... voce deve apertar as 2 teclas conjuntamente ( algumas vezes ) para ir na direção escolhida, e não ficar segurando uma e ficar clicando em outra... porque o código seria diferente.voce vai encontrar um exemplo disso nesse link:http://translate.googleusercontent.com/tra...Ub9xBasWaPVahsgabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Março 31, 2011 Autor Denunciar Share Postado Março 31, 2011 mas a linguágem é diferente @_@ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Março 31, 2011 Denunciar Share Postado Março 31, 2011 Tudo bem... achei que voce entenderia e faria uma conversão de códigomas para exemplificar extamente o que esta querendo veja esse codigo codigo fontehttp://fabianosalles.eti.br/blog/delphi/fi...VCLII-fonte.zipexecutavelhttp://fabianosalles.eti.br/blog/delphi/fi...imVCLII-bin.zipestude o código e veja se consegue entender a lógicaabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Abril 1, 2011 Autor Denunciar Share Postado Abril 1, 2011 Eu to analizando o código.. Se bater alguma dúvida posso perguntar nesse tópico também? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Abril 1, 2011 Denunciar Share Postado Abril 1, 2011 Antes que voce pergunte, vou sanar a sua dúvida ... voce deve apertar as 2 teclas conjuntamente para ir na direção escolhida ... o shape se moverá na horizontal, vertical e diagonalunit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Shape1: TShape; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} function tbKeyIsDown(const Key: integer): boolean; begin Result := GetKeyState(Key) and 128 > 0; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if tbKeyIsDown(VK_LEFT) then Shape1.Left := Shape1.Left -5; if tbKeyIsDown(VK_UP) then Shape1.Top := Shape1.Top -5; if tbKeyIsDown(VK_RIGHT) then Shape1.Left := Shape1.Left +5; if tbKeyIsDown(VK_DOWN) then Shape1.Top := Shape1.Top +5; end; end.abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Abril 1, 2011 Autor Denunciar Share Postado Abril 1, 2011 (editado) Cara desculpa a ignorância mas eu não entendi a sua função. Como um resultado booleano pegou a Key e mais esse 128 > 0?Não entendi essa linha. você pd me explicar por favor?Outra dúvida... Na sua função você colocou que a sua "Key" é uma constante.. Quando devemos deixar os parâmetros das funções com "cons","var" ou qualquer coisa do gênero. Eu nunca entendi isso... Brigadão pela forç Jhonas! ^^ Editado Abril 1, 2011 por LucAlucard Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Abril 1, 2011 Denunciar Share Postado Abril 1, 2011 Temos dificuldades em entender quando não esta no nosso idioma...rsThe GetKeyState function retrieves the status of the specified virtual key. The status specifies whether the key is up, down, or toggled (on, off ¾ alternating each time the key is pressed). SHORT GetKeyState( int nVirtKey // virtual-key code ); ParametersnVirtKeySpecifies a virtual key. If the desired virtual key is a letter or digit (A through Z, a through z, or 0 through 9), nVirtKey must be set to the ASCII value of that character. For other keys, it must be a virtual-key code. If a non-English keyboard layout is used, virtual keys with values in the range ASCII A through Z and 0 through 9 are used to specify most of the character keys. For example, for the German keyboard layout, the virtual key of value ASCII O (0x4F) refers to the "o" key, whereas VK_OEM_1 refers to the "o with umlaut" key. Return ValuesIf the function succeeds, the return value specifies the status of the given virtual key. If the high-order bit is 1, the key is down; otherwise, it is up. If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled. Resumindo:Esta função retorna true se a tecla informada estiver pressionada. False em caso contrário.Como um resultado booleano pegou a Key e mais esse 128 > 0?Inicialmente, o código ASCII só utilizava números de 0 a 127 e os equipamentos tinham um número reduzido de caracteres. Não tinham letras acentuadas, por exemplo.Várias extensões ao código ASCII foram propostas, para que o conjunto de caracteres representáveis possuísse até 256 caracteres. entendeu porque 128 no código ? caso não tenha entendido veja:http://tectuts.wordpress.com/2008/08/12/ca...s-e-os-codigos/Na sua função você colocou que a sua "Key" é uma constante.. Quando devemos deixar os parâmetros das funções com "cons","var" ou qualquer coisa do gênero. Eu nunca entendi isso...function tbKeyIsDown(const Key: integer): boolean; begin Result := GetKeyState(Key) and 128 > 0; end;porque Key sempre vai retornar um valor numérico inteiro, então ao passar o valor de Key ( que seria um numero ) a função vai testar o estado da tecla pressionadaabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Abril 5, 2011 Autor Denunciar Share Postado Abril 5, 2011 Entendi eu entendi.. Mas fico faltando uma coisa...Ainda n entendi como o Result que é boolean conseguiu capturar um valor Inteiro. porque isso funcionou? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Abril 5, 2011 Denunciar Share Postado Abril 5, 2011 Ainda n entendi como o Result que é boolean conseguiu capturar um valor Inteiro. porque isso funcionou?vou dar um exemplo bem simplesfunction parimpar(var num:integer) :boolean; begin if num mod 2 = 0 then result := true else result := false; end; procedure TForm1.Button1Click(Sender: TObject); var n : integer; begin n := 3; if parimpar(n) then showmessage('par') else showmessage('impar'); end;veja que eu defini uma variavel inteira como entrada da função, e uma variavel boleana como saida da funçãoveja que vou testar o resto de uma divisão de um numero que será 0 ou diferente de 0se o resto da divisão for zero o numero é par, caso contrário é impar e para cada teste digo se o numero e true ou false para o resto da divisão ... entendeu ?abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Maio 2, 2011 Autor Denunciar Share Postado Maio 2, 2011 Então se ele for 0 (par) ele é True caso contrário ele é False? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 2, 2011 Denunciar Share Postado Maio 2, 2011 Então se ele for 0 (par) ele é True caso contrário ele é False?extamentefunction parimpar(var num:integer) :boolean; begin if num mod 2 = 0 then result := true else result := false; end; procedure TForm1.Button1Click(Sender: TObject); var n : integer; begin n := 3; if parimpar(n) then showmessage('par') // se o resto da divisão for 0 else showmessage('impar'); // se o resto da divisão for > 0 end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Maio 3, 2011 Autor Denunciar Share Postado Maio 3, 2011 Brigadão Jhonas!!! Briaadão por sanar mais essa dúvida de tantas q eu já postei ^^'.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
LucAlucard
Olá pessoal tudo bem? Bom... Hoje estou aqui novamente com mais uma dúvidasinha... Parece simples mas eu nãos sei =/.
Como saber se 2 teclas estão precionadas? Por exemplo:
Tenho um shape. Quando eu aperto:
Seta pra cima ele sobe
Seta pra Esquerda ele Vai indo pra Esquerda
Como fazer ele ir pras duas direções? Capturar o key das duas.. quando eu apertar o key para a esquerda e cima? Alguém sabe?
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.