Ir para conteúdo
Fórum Script Brasil
  • 0

Saber O Caracter Pelo Valor


siam

Pergunta

10 respostass a esta questão

Posts Recomendados

  • 0

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);.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0
No meu caso exemplo, eu tenho o valor 50 onde Chr(50) = '2' e o shift down; então somente o Case resolveria
Esse 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.
Link para o comentário
Compartilhar em outros sites

  • 0
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.

Link para o comentário
Compartilhar em outros sites

  • 0
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 ?

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...