Comment convertir un char en sa valeur code touche?

Résolu
mighty_warrior Messages postés 123 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 9 février 2010 - 22 avril 2008 à 20:56
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 23 avril 2008 à 22:48
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

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
22 avril 2008 à 21:34
Salut,

Ord('A') 

et l'inverse  chr(65).
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
23 avril 2008 à 11: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="" />
3
mighty_warrior Messages postés 123 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 9 février 2010
22 avril 2008 à 22:58
le probléme est que si je fait ord('a') j'obtient 1 et non 65!
0
mighty_warrior Messages postés 123 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 9 février 2010
22 avril 2008 à 23:07
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mighty_warrior Messages postés 123 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 9 février 2010
23 avril 2008 à 00:03
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é. 
0
mighty_warrior Messages postés 123 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 9 février 2010
23 avril 2008 à 00:52
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.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
23 avril 2008 à 22:48
@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.
0
Rejoignez-nous