Caractère illicite

Résolu
cs_bertrand_s Messages postés 2 Date d'inscription vendredi 10 novembre 2006 Statut Membre Dernière intervention 13 novembre 2006 - 12 nov. 2006 à 18:47
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 16 nov. 2006 à 20:37
Question de débutant !
Bonjour à tous,
Je demarre sous Delphi et je cherche une solution pour limiter les entrées dans un "edit" à des chiffres et une virgule.

Quelqu'un pourrait-il m'aider?
Merci.

14 réponses

PoulpHunter Messages postés 51 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 8 avril 2009
12 nov. 2006 à 22:19
perso j'utilise plutôt l'évènement OnKeyPress
par exemple :

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in #8,'0'..'9') then
key:=#0;
end;

// si la touche appuiée n'est pas un chiffre alors c'est comme si aucune touche n'avais été appuiée...

maintenant t'as le choix  tu fait en fonction de tes prefs lol
++
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
13 nov. 2006 à 09:27
salut,

fait juste attention au option régional! certaines langages utilise le point (.) et non la virgule(,) comme séparateur décimal. respecte les préférence de l'utilisateur.

pour lire les options de windows(je sait pas pour linux):
var
tmpformatSettings : TFormatSettings;
begin
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, tmpformatSettings);
tmpformatSettings.DecimalSeparator <--

lit les une fois au démarrage du prog et stock les dans une unit global.
Tu peux stocker que le séparateur ou le FormatSetting en entier.

PS: (onKeyDown me semble plus simple aussi)
3
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
12 nov. 2006 à 20:28
tu n'as cas surcharger le TCustomEdit, en modifiant la methode Change de cette maniere

procedure Change;
begin
    inherited;
    if not self.text[length(self.text)] in ['0', '1', ..., '9', decimalSeparator] then
       self.text := leftstr(self.text, length(self.text)-1);
end;

c'est juste un premier jet, a mon avis tu devra surement faire quelque chose pour eviter le double appel de l'evenement OnChange.
0
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
13 nov. 2006 à 08:08
salut!
 PoulpHunter> moi aussi j'utilise cette méthode mais on peut toujour faie un coller avec le deuxieme boutton de la souris alor prend en compte Bertrand_s
++
N*M*B
0

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

Posez votre question
cs_bertrand_s Messages postés 2 Date d'inscription vendredi 10 novembre 2006 Statut Membre Dernière intervention 13 novembre 2006
13 nov. 2006 à 13:24
Merci à tous pour vos réponses très intéressantes.
Après un paquet d'heures passée dessus j'ai même eu des réponses inespérées comme les options régionales qui m'ont faites ch... merci à toi aussi Loda ;-)
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
13 nov. 2006 à 13:38
tu as acces directement au separateur decimal grace a la variable DecimalSeparator de l'unité SysUtils, sans avoir besoin de manipuler de TFormatSettings
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
13 nov. 2006 à 15:09
tiens, j'ai bien faite de me lever ce matin, j'ai appris qqch :D

PS: j'utilise une copie du TFormatSettings du system car je modifie les format de date/heure/... . Ceci me permet de passer MON TFormatSettings aux fonctions de conversion lorsque je lit des fichiers de sauvegarde. Comme ça, mes fichiers de sauvegarde ne dépendent pas des options régionales. :)
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
13 nov. 2006 à 16:09
tout a fait loda. le seul avantage du decimalseparator, c'est si tu n'as besoin que de lui. si tu veux modifier le format date/heure, ..., alors il te reste le TFormatSettings
0
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
13 nov. 2006 à 17:52
re !
n'oubliez pas que par un clique droit sur le TEdit le popup menu par défaut nous permet de faire un coller ! personelement j'ajoute un TPopUpMenu vide( ou avec un coller sécurisé) et je l'assigne a mon TEdit (y'aurait-il un autre moyen )

N*M*B
0
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
13 nov. 2006 à 18:06
désolé ! pas la paine d'ajouter un PopUpMenu il sufit de faire ceci :

procedure TForm1.Edit1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
begin
handled:= true  // metre a false pour réactiver le popupmenu par défaut
end;
a+
N*M*B
0
PoulpHunter Messages postés 51 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 8 avril 2009
13 nov. 2006 à 20:51
et si au lieu de chercher à filtrer, juste on teste (style inttostr) et si sa marche pas, bah sa met une valeur par défault ? nan ?
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
14 nov. 2006 à 00:10
j'avai fait un composant qui prenait une valeur reelle au lieu d'un texte, je vais essayer de remettre la main dessus et de le poster demain
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
15 nov. 2006 à 15:11
à tout hasard, le composant TJvValidateEdit de JEDI vcl fonctionne bien. en plus il y a quelques propriétés supplémentaires intéressantes.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
16 nov. 2006 à 20:37
regarde celles qui sont proposées par ce code ... elles pourraient bien te plaires (elles ont évoluées depuis)

 
@+
Cirec

<hr size="2" />
0
Rejoignez-nous