siam Postado Dezembro 8, 2006 Denunciar Share Postado Dezembro 8, 2006 Pessoal, teria como saber o caracter que representa o valor da tecla?Por exemplo: eu sei que o valor da tecla é 50 e sei também que Shift está down; a partir daí como retornar o caracter '@' ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Dezembro 8, 2006 Denunciar Share Postado Dezembro 8, 2006 opausa-se Chr();exemploshowmessage(chr(65)); // = Ashowmessage(inttostr(ord('A'))); // = 65 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Dezembro 8, 2006 Denunciar Share Postado Dezembro 8, 2006 Opa, usa a função MapVirtualKey -> function LoCase(ch : char) : char; begin if (ch in ['A'..'Z']) then inc(byte(ch),32); Result:=ch; end; LoCase(Char(MapVirtualKey(k,2))) onde k é o VirtualKey e 2 é a operação desejada. Se Shift estiver Down passe o resultado para a função fixkey -> function fixkey(ch : char) : char; begin case ch of '1' : ch:='!'; '2' : ch:='@'; '3' : ch:='#'; '4' : ch:='$'; '5' : ch:='%'; '6' : ch:='^'; '7' : ch:='&'; '8' : ch:='*'; '9' : ch:='('; '0' : ch:=')'; '-' : ch:='_'; '=' : ch:='+'; '/' : ch:='?'; ';' : ch:=':'; '.' : ch:='>'; ',' : ch:='<'; '\' : ch:='|'; '''' : ch:='"'; 'a'..'z' : ch:=char(byte(ch)-32); end; result:=ch; end;Se CapsLock estiver Toggled passe ch:=Upcase(ch);. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 siam Postado Dezembro 8, 2006 Autor Denunciar Share Postado Dezembro 8, 2006 No meu caso exemplo, eu tenho o valor 50 onde Chr(50) = '2' e o shift down; então somente o Case resolveria. Mas minha dúvida é: Esse Case serve para qualquer configuração do teclado?Quanto ao Caps Lock, tem que checar contra o Shift também, pois se os dois estiverem on, resultará em minúsculas. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 siam Postado Dezembro 8, 2006 Autor Denunciar Share Postado Dezembro 8, 2006 Por exemplo, em dois teclados que tenho o Shift 6 resulta em "¨" e não em "^".O "^" é o Shift ~Então queria saber se existe via código o retorno dos caracteres Shift pela configuração do teclado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Dezembro 8, 2006 Denunciar Share Postado Dezembro 8, 2006 No meu caso exemplo, eu tenho o valor 50 onde Chr(50) = '2' e o shift down; então somente o Case resolveriaEsse 50 é Char ou VirtualKey? Porque se for VirtualKey tem que usar MapVirtualKey. E MapVirtualKey(Key,0) transforma uma VirtualKey em um scan code, que é dependente de dispositivo e tem valor correspondente a cada configuração do teclado. Também tem a função LoadKeyboardLayout que pega os configurações de lingua do teclado que pode ser usada em conjunto com a função MapVirtualKeyEx. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 siam Postado Dezembro 8, 2006 Autor Denunciar Share Postado Dezembro 8, 2006 O 50 é o valor da tecla, o mesmo retornado no evento onKeyDown.Então o case não pode ser fixo, porque difere conforme a configuração do teclado.Já utilizei o MapVirtualKey, mas não aidantou. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Dezembro 8, 2006 Denunciar Share Postado Dezembro 8, 2006 O 50 é o valor da tecla, o mesmo retornado no evento onKeyDown.Então é VirtualKey.Nesse caso se quer o Char deve tratar o evento OnKeyPress ou processar a mensagem WM_CHAR cujo Low wParam é o código do caractere da tecla. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 siam Postado Dezembro 8, 2006 Autor Denunciar Share Postado Dezembro 8, 2006 Acontece que não exsite nenhum evento. O que existe é o valor da VK pressionada e se o Shift também estiver sabido pelo GetAsyncKeyState. A partir destas duas informações tenho que retornar o caracter daquele teclado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 10, 2006 Denunciar Share Postado Dezembro 10, 2006 siam, já que não tem evento, você poderia dizer como está obtendo tal informação? Seria através de um gancho (Hook) de teclado?Talvez isso ajude no seu auxílio.[]s Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 siam Postado Dezembro 11, 2006 Autor Denunciar Share Postado Dezembro 11, 2006 siam, já que não tem evento, você poderia dizer como está obtendo tal informação? Seria através de um gancho (Hook) de teclado?Talvez isso ajude no seu auxílio.Num evento de Timer:procedure TForm1.Timer1Timer(Sender: TObject); begin if (GetAsyncKeyState(54) < 0) and (GetAsyncKeyState(VK_Shift) < 0) then { Aqui retorno o caracter equivalente ao Shift 6 } end;Eis a dúvida: Como saber o caracter que equivala ao Shift 6 em qualquer teclado ?No meu teclado é a ¨(trema); e nos outros ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
siam
Pessoal, teria como saber o caracter que representa o valor da tecla?
Por exemplo: eu sei que o valor da tecla é 50 e sei também que Shift está down; a partir daí como retornar o caracter '@' ?
Link para o comentário
Compartilhar em outros sites
10 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.