Key help [Résolu]

Messages postés
10
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
19 janvier 2010
- - Dernière réponse : ThWilliam
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
- 1 nov. 2009 à 18:00
salut tous le monde;
j'ai une table vente avec un champ montant qui est de type monétaire mon problème est le suivant:
il n'accepte pas la touche separateur décimal du pavé numérique c'est à dire si je veux saisir 80,75 alors il faut l'écrire à partir de la touche virgule
j'aimerais savoir le code de la touche separateur décimal (exemple touche blanc code #13) et celui de la touche virgule pour que en appuiyant sur la touche separateur decimal c la virgule qui s'écrit.
ou bien comment focer le separateur décimal du pavé numérique à écrire une virgule dans un champ monétaire
merci pour votre aide
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
4232
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
24 juin 2019
32
3
Merci
Salut,

mets la propriété "KeyPreview" de la fiche à True
et tu complètes l'évènement "OnKeyPress" comme ceci:
[hr]procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

[b]begin
  if /bKey in [',','.'] [b]then
    if /bDecimalSeparator <> Key [b]then
      /bKey := DecimalSeparator;
end;
[hr]et c'est tout ... ce code fonctionnera pour tout les composants de la fiche
[hr]@+Cirec

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Cirec
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
0
Merci
Salut AITFRAH1,

Tu trouveras facilement de l'aide en cherchant "virtual key codes", constantes définies dans l'unité Windows.

Mais je crains que la touche "virgule" du clavier n'aie pas de code attribué. Quoiqu'il en soit, le code ascii du caractère "," vaut 44 et sa valeur hexadécimale vaut $2C. Si jamais ça peut t'aider.

Bonnes recherches.
Commenter la réponse de zwyx
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
0
Merci
Quant-au code:

var
  iDecimalPosition: Byte;
  sMessage: String;
  ...
begin
  ...
  { remplacer le point ou la virgule éventuellement présente par DecimalSeparator, caractère défini dans la configuration de Windows }        
  iDecimalPosition := Pos(#46, sMessage); { position du caractère '.' }
  if iDecimalPosition = 0 then
    iDecimalPosition := Pos(#44, sMessage); { position du caractère ',' }
  if iDecimalPosition <> 0 then
    sMessage[iDecimalPosition] := DecimalSeparator;
  ...

Cordialement
Commenter la réponse de zwyx
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
0
Merci
Je m'incline.
Commenter la réponse de zwyx
Messages postés
10
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
19 janvier 2010
0
Merci
Merci pour votre aide. J'ai réglé le problème avec le code suivant :
Procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#46 then key:=#44;
end;
et ça marche très bien.
Commenter la réponse de AITFRAH1
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
1
0
Merci
Salut,

"ça marche très bien." : tu remplaces le point par la virgule, mais n'oublie pas que certains peuvent avoir configurer leur séparateur décimal = point (paramètres régionaux de Windows). Aussi je te conseille vivement le code de cirec, à ceci près que je ne placerais pas l'événement KeyPress dans Form1, car tu peux avoir besoin du point en d'autres occasions.

A +
Thierry
Commenter la réponse de ThWilliam