Comment convertir un char en sa valeur code touche? [Résolu]

Signaler
Messages postés
123
Date d'inscription
lundi 12 juin 2006
Statut
Membre
Dernière intervention
9 février 2010
-
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
-
Bonsoir,

donc ma question: comment convertir un char en sa valeur code touche?

par exemple pour la lettre A on sait que son code touche est 65 mais dans mon programme la lettre est dans un char alors comment récupérer le code touche

merci beaucoup!

7 réponses

Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
16
Salut,

Ord('A') 

et l'inverse  chr(65).
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
38
oh la oh la


c'est pas du tout comme ça que Keybd_Event fonctionne :

{Reste appuyé ou relache une touche aKey
en
fonction du paramètre Down}
Procedure
ToogleKey(Const aKey : Byte; Const Down: Boolean = True);
Var KeyDown : Byte;
Begin

  If  Not Down Then

    KeyDown : = 2
  Else
    KeyDown := 0;

  keybd_event(aKey, 0,
KeyDown, 0);
End ;

{Reste appuyé ou
relache les touches Ctrl et Alt
en fonction du paramètrte Down}
Procedure SimuleCtrlAlt(Const Down: Boolean = True);
Var KeyDown : Byte;
Begin

  ToogleKey(VK_MENU, Down);

  ToogleKey(VK_CONTROL, Down);

End;

{Appuie et relache une touche}
Procedure DoKeybdEvent(Const
aKey : Byte);
Begin

  keybd_event(aKey , 0, 0, 0);

  keybd_event(aKey ,
0, KEYEVENTF_KEYUP, 0);

End;

{Gère
les touches à bascule VerrMaj VerrNum ArrêtDefil}
Procedure SimuleOnOfKey(Const
aKey: Byte; Const IsOn: Boolean =
True);
Begin
  If GetKeyState(aKey)
<> Integer(IsOn) Then

    DoKeybdEvent(aKey);
End ;

Procedure
PressKey(Const aKey : Byte);

Begin
  ToogleKey(aKey);
End;

Procedure
ReleaseKey(Const aKey : Byte);

Begin
  ToogleKey(aKey, False);

End;

{Gère l'appuie n'importe quelle touche du clavier
  c'est
la procédure que l'on utilisera pour simuler l'appuie
  sur les différentes
touches du clavier}
Procedure
SimuleKey(Const aChar: Char);

Begin
  Case aChar Of
    {Touches
majuscules}

    'A'..'Z','0'..'9','?','.','/','§','¨','£','%','µ','°','+':

    Begin

      ToogleKey(VK_SHIFT);


      DoKeybdEvent(VkKeyScan(aChar));

      ToogleKey(VK_SHIFT, False);


    End;

    {Touches Ctrl+Alt}

    '~','#','{','[','|','`','\','^','@',']','}':

    Begin

      SimuleCtrlAlt;

      DoKeybdEvent(VkKeyScan(aChar));


      SimuleCtrlAlt(False);

    End;


    Else
    {Touches minuscules}

      DoKeybdEvent(VkKeyScan(aChar));

  End;
End;


pour l'utilisation c'est simple :
{On s'assure d'être en minuscule
   obligatoire pour
le bon fonctionnement

   ne faire qu'une fois en début de code (dans le OnCreate par Ex.)}

  SimuleOnOfKey(VK_CAPITAL, False);
{et on simule l'appuie des touches}
For I : = 1  To length(mot) Do

  SimuleKey(Mot[I]);

{pour les
combinaisons de touche autres que "standard"}
{Exemple faire un Ctrl+C}

  PressKey(VK_CONTROL);


  SimuleKey('C');

  ReleaseKey(VK_CONTROL);

 
@+
Cirec

<hr siz ="" />

 
@+
Cirec

<hr siz="" />
Messages postés
123
Date d'inscription
lundi 12 juin 2006
Statut
Membre
Dernière intervention
9 février 2010

le probléme est que si je fait ord('a') j'obtient 1 et non 65!
Messages postés
123
Date d'inscription
lundi 12 juin 2006
Statut
Membre
Dernière intervention
9 février 2010

en fait ce que je cherche a faire c ça: Avec le code suivant (où c est un char)
 keybd_event( char a convertir en code touche,0,1,0)

par exemple si c represente la lettre A il vaut 65 une fois convertit.

merci
Messages postés
123
Date d'inscription
lundi 12 juin 2006
Statut
Membre
Dernière intervention
9 février 2010

J'ai réussi à remédier a mon probléme de départ comme ceci:

S := 'texte';
if iskeydown('0') then 
 begin
  for i := 1 to length(s) do
   begin
   C := S[i];
   x := ord(c);
   y := 32;
   z := x-y;
   keybd_event(z,0,1,0);
   keybd_event(z,0,2,0);
   end;
end;
Donc quand j'appuie sur la touche 0 j'écrit la valeur de S et tout marche bien

Mon second souci c'est que si S vaut par exemple ' delphifr c cool' il sera écrit comme ceci: delphifrccool.

alors y-a t'il un moyen de gérer les espaces?

merci

ps merci [auteur/CARIBENSILA/217111.aspx Caribensila] ton Ord('A') m'a bien aidé. 
Messages postés
123
Date d'inscription
lundi 12 juin 2006
Statut
Membre
Dernière intervention
9 février 2010

Bon je crois que j'ai de la chance. Je vient de trouver une parade, certe ce n'est sans doute pas la meilleur solution mais bon..je la poste quand même

mot: string;
c: char;
x,y,z,NbrCaractere: integer;

dans formcreate
mot := ' delphifrccool';

dans un timer
if iskeydown('0') then  //quand j'appuie sur la touche zero
begin
for i : = 1 to length(mot) do
  begin
  C :=mot[i];
  x := ord(c);
  y := 32;
  z := x-y;
  keybd_event(z,0,1,0); //j'appuie sur la touche correspondant a chaque lettre composant "mot"
  keybd_event(z,0,2,0);//je relâche la touche correspondant a chaque lettre composant "mot"
  inc(NbrCaractere); //
  if (NbrCaractere=7)xor(NbrCaractere=10) then // si j'ai ecrit 7 lettres (delphi = 6 lettres +1)
   begin
   keybd_event(32,0,1,0); //faire un espace
   keybd_event(32,0,2,0);
   end;
  end;
NbrCaractere := 1;
 end;

voilà.

mais si quelqu'un a une meilleur solution à proposer je suis preneur lol.

allez bonne nuit à tous et merci.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
@Cirec : là, tu es bon pour nous faire un tuto sur la gestion du clavier

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.