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
  Citar
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
  Citar
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
  Citar
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.

×
×
  • Criar Novo...