Virgule et point

Résolu
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 14 mars 2007 à 16:25
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 17 mars 2007 à 14:15
Bonjour à tous,
Petite question qui a déjà fait l'objet de discussions(delphiProg, Caribensila etc..) mais comme
je n'ai trouvé de solutions satisfaisantes j'y reviens :

dans un écran où il y a à la fois des formulaires et des grids en lecture, je souhaiterais faire apparaître dans les zones numériques les nombres avec la virgule en séparateur(norme française), c'est-à-dire à la fois dans les Edit et dans les zones d'affichage.

DecimalSeparator := '.' pour forcer le point sur Initialization afin de se servir du pavé numérique.
pour les Edit, il suffit de traiter par l'evènement OnKeyPress

mais mon problème est sur les OnCalcFields avec affichage dans les Grids..
j'ai bien essayé de mettre des displayFormat mais si je demande la virgule alors l'affichage est tronqué à la valeur entière..ex : ### ### ##0,00 ? (1287,23 - > 1287) et si
### ### ##0.00 ?  alors -> 1287.23 ?.

????
merci de votre aide

cantador

10 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
16 mars 2007 à 18:56
merci Loda et ThWilliam pour vos conseils.
je teste et je reviens..
@+
3
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
15 mars 2007 à 15:13
Salut Cantador,

Ton format d'affichage ###0.00 est bon, mais comme tu as modifié DecimalSeparator, il est normal que tu obtiennes : 1287.23 au lieu de 1287,23
Donc ton problème est uniquement de transformer la frappe du point en virgule en employant les événements OnKeyPress des Edit ou de la fiche (avec KeyPreview = true).
L'événement OnKeyDown permet de faire la distinction entre un point tapé sur le pavé numérique et un point obtenu avec Shift + point. Dans ce cas, tu peux faire comme Excel, qui ne transforme en decimalseparator que le point tapé sur le pavé numérique.

A +
Thierry
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 mars 2007 à 17:20
merci de me répondre ThWilliam et c'est OK pour tout bien sûr.

mais comment fais-tu pour faire apparaître dans ce contexte un champ calculé avec la virgule en séparateur ?
(ex prix unitaire * quantité)

évidemment si je force la virgule dans les paramètres régionaux, le souci est réglé mais dans ce cas il faut taper la virgule et on ne peut plus taper le point (et donc plus de pavé numérique)
???
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
15 mars 2007 à 18:58
Salut Cantador,

J'ai l'impression qu'on tourne un peu en rond.
DisplayFormat doit toujours mentionner le point comme séparateur décimal (##0.00).
L'affichage sera :
   -avec le paramètre régional à la française : 125,37
   - à l'américaine : 125.37
Donc tu n'as pas à toucher aux paramètres régionaux.
Il te suffit de convertir la frappe du point (ou de la virgule) en caractère de séparation décimale.
Ainsi ton programme tournera aussi bien en France qu'aux USA.

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if Key in ['.', ','] then Key:= DecimalSeparator;
end;

A +
Thierry
0

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

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 mars 2007 à 19:04
Compris, mais dans les champs calculés, il n'y a pas de frappe..
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
15 mars 2007 à 19:52
Pour un champ calculé, tu définis simplement son DisplayFormat... 
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 mars 2007 à 19:59
oui, mais çà ne marche pas d'où ma question.
A moins qu'il n'y ait autre chose..
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
16 mars 2007 à 12:51
salut,
je suis pas certain de bien comprendre ton problèm, mais pourquoi ne pas prendre le problème dans l'autre sens.

tu laisse le decimalSeparator à ',' et lors de la frappe, tu remplace les '.' par des ',' (onKeyPress, ...). Comme ça t'affiche des virgule et tu peux aussi saisir avec des points.

ça jouerais, non?

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
16 mars 2007 à 13:16
Salut Loda,

c'est exactement ce que j'essaie de faire comprendre à cantador...

Thierry
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
17 mars 2007 à 14:15
Effectivement Loda tu as raison :
DecimalSepator := ','; + traitement sur OnEditKeyPress est suffisant
(car il se déclenche systématiquement)

Pour les simple affichages et autres OnCalcField, il suffit de préciser le format currency

ne me restait plus qu'à bien choisir les colonnes qui traitent seulement des nombres :

il suffit de préciser la propriété TextEdit (j'utilise le QuanTumGrid 5) des columns et ensuite :

procedure TForm1.cxGrid1DBTableView1EditKeyPress(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem;
AEdit: TcxCustomEdit; var Key: Char);
begin
if AEdit is TcxTextEdit then
if key = '.' then Key := ',';
end;

initialization
DecimalSeparator := ',';

end.

Nickel !

merci
0
Rejoignez-nous