Virgule et point [Résolu]

cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 14 mars 2007 à 16:25 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 16 mars 2007 à 18:56
3
Merci
merci Loda et ThWilliam pour vos conseils.
je teste et je reviens..
@+

Merci cs_cantador 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de cs_cantador
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 15 mars 2007 à 15:13
0
Merci
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
Commenter la réponse de ThWilliam
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 15 mars 2007 à 17:20
0
Merci
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)
???
Commenter la réponse de cs_cantador
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 15 mars 2007 à 18:58
0
Merci
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
Commenter la réponse de ThWilliam
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 15 mars 2007 à 19:04
0
Merci
Compris, mais dans les champs calculés, il n'y a pas de frappe..
Commenter la réponse de cs_cantador
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 15 mars 2007 à 19:52
0
Merci
Pour un champ calculé, tu définis simplement son DisplayFormat... 
Commenter la réponse de ThWilliam
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 15 mars 2007 à 19:59
0
Merci
oui, mais çà ne marche pas d'où ma question.
A moins qu'il n'y ait autre chose..
Commenter la réponse de cs_cantador
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 16 mars 2007 à 12:51
0
Merci
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.
Commenter la réponse de cs_Loda
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 16 mars 2007 à 13:16
0
Merci
Salut Loda,

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

Thierry
Commenter la réponse de ThWilliam
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 17 mars 2007 à 14:15
0
Merci
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
Commenter la réponse de cs_cantador

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.