Key help

Résolu
AITFRAH1 Messages postés 10 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 19 janvier 2010 - 19 oct. 2009 à 12:02
ThWilliam Messages postés 418 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
A voir également:

6 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
19 oct. 2009 à 13:38
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
3
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016
19 oct. 2009 à 12:14
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.
0
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016
19 oct. 2009 à 12:23
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
0
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016
19 oct. 2009 à 14:35
Je m'incline.
0

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

Posez votre question
AITFRAH1 Messages postés 10 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 19 janvier 2010
1 nov. 2009 à 16:40
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.
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
1 nov. 2009 à 18:00
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
0
Rejoignez-nous