cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
14 mars 2007 à 16:25
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 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 ?.
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 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.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 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)
???
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 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.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 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;