IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Composant pour limiter les décimales à deux


Sujet :

Composants VCL Delphi

  1. #1
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut Composant pour limiter les décimales à deux
    Bonjour,

    Comme the title l'indique...

    L'autre fois je ne pensais pas que cela soit possible de trouver un tel composant et je suis tombé par hasard sur le RXCurrencyEdit.

    Il formate super automatiquement les nombres réels et entiers.

    Il limite les décimales à la demande.

    Mais, mais... il m'empêche de réaliser certaines opérations, comme par exemple une simple affectation ou bien l'ajout d'un zéro...

    Je viens de remettre un vulgaire Edit en lieu et place et tout baigne dans l'huile.


    Bref, voici ma question fort simple :
    Je serais bien content de savoir si une sorte d'Edit existe en compo avec seulement la limitation de décimales à deux.

    Merci d'avance de vos idées

    PS : Je vais me lancer dans la construction d'une procédure en KeyPress, mais si ça existe tout fait...

  2. #2
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut Re: Compo pour limiter à deux les décimales
    Citation Envoyé par J-P
    Mais, mais... il m'empêche de réaliser certaines opérations, comme par exemple une simple affectation ou bien l'ajout d'un zéro...
    Que veux-tu dire par là ?

  3. #3
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Salut Nono,

    Je tente de bidouiller/améliorer laborieusement un petit progr éditeur de sommes en toutes lettres grâces à des sources libres récoltées.

    Par exemple si un utilisateur pour diverses raisons ne tape pas la seconde décimale, le résultat de la function/procédure principale retourne directo les centimes, exemple :

    Si la saisie de l'utilisateur est :

    123,9

    Hé bien le résultat est (en lettres*) ===> ... neuf ! (et non quatre-vingt-dix)
    (*Oui en lettres, mais auparavant ce résultat est lu afin d'être exploité et converti en lettres dans ce fameux Edit auquel j'ajoute en certains cas..., un zéro en seconde décimales)

    Alors à l'aide de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    if pos(',9',CurrencyEdit1.Text) > 0 then
    Edit2.Text := CurrencyEdit1.Text + '0';
    ...
    Tu vois, j'ajoute en cas du chiffre "neuf" après la virule : un zéro qui va lui, permettre d'écrire la bonne réponse = ... quatre-vingt-dix.

    Donc avec le "super" CurrencyEdit, hé bien cette manip était rigoureusement impossible !

    Tandis qu'avec un pauvre tout bête Edit = impec.

    (Sauf... cette histoire de limitation à deux décimales !!! CQFD )

    Tu vas me dire que s'il faut que je fasse des tas de "if" (un pour chaque chiffre devant la première virgule, ect.) je complique le code.

    Oui, mais j'aime bien avant de compliquer la lecture du code grâce aux variables ; de "basiquer" le code.

    Je suis loin d'être tous les jours sur ma bécane avec Delphi ouvert, alors je vais doucement

    Bonne nuit !

  4. #4
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Tu peux faire simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      edit1.Text := formatFloat('0.00',strToFloat(edit1.Text));
    Bloon

  5. #5
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour et merci Bloon,

    L'autre fois j'avais lu et décortiqué (enfin tenté) une des super réponses de la FAQ de toi sur ce formatFloat('0.00'...
    http://delphi.developpez.com/faq/?pa...e#arrondirreel

    Mais pas possible de gérer les deux décimales ; je veux dire d'obtenir autre chose que des ,00 ?

    Autrement dit de taper par exemple 1234,77 et stop = plus possible d'ajouter un autre chiffres en décimale

    Je viens de mettre ta ligne de code en OnChange sur Edit1 et toujours un arrondi à ,00.

    Mais corrige-moi si je raconte des bêtises

    Merci encore à toi et aux autres auteurs de ce forum qui se donnent du mal pour nous-autres débutant afin que nous avancions de plus en plus chaque jour dans la maîtrise du phiphi

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 50
    Points : 61
    Points
    61
    Par défaut
    salut,

    et si dans le onchange tu controlais la position du separateur decimal, et si ce dernier est a la position (longueur - 2) de la fin de ta chaine, tu ne prends plus en compte la frappe. seul inconvenient de cela, il est necessaire d'etre sur que l'ajout ce fait en fin de chaine et que l'utilisateur n'a pas deplacer le curseur a un autre position..., mais aussi tu peux interdire les touche fleches.

    autre solution si tu utilise la JVCL, il y a un composant JvSpinedit qui peut repondre a ton besoin.

  7. #7
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour,

    Merci Thierry de ton aide, mais je ne suis pas fichu d'installer la biblio dont tu parles ; je ne suis pas le seul.

    Les autres telles RX, etc = ok, mais celle là...

    Justement de viens de réaliser des séries de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // ZERO *********************************
    if pos(',00',Edit1.Text) > 0 then
    Key := #0
    else
    if pos(',01',Edit1.Text) > 0 then
    Key := #0
    else
    ...
    de zéro à neuf..., je sais : pas très avancé comme manip, mais ça fonctionne impec sans inconvénient (enfin pas testé sous toutes les coutures).

    J'avais passé aussi pas mal de temps sur un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if pos('Key in [',00'..'0,99']) > 0 then
    ...
    Trop beau pour être vrai...

    Mais je te parle pas des InsultesBox

    Cordialement

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 50
    Points : 61
    Points
    61
    Par défaut
    salut,

    je pensant plus a quelque chose de comme ca avec un edit et l'evenement onkeypress :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    var
      PosSeparateur : Integer;
     
    begin
    // backspace, on laisse faire
      if key = #8 then
        exit;
     
    // chiffre 0..9
      if (key < '0') or (key > '9') then
     
    //  on verifie qu'il ne s'agit pas du separateur decimal
        if key <> DecimalSeparator then
          key := #0;
     
    // le separateur est il deja en place
      PosSeparateur:= pos(DecimalSeparator, edit1.Text);
     
    // Oui, mais le nombre de decimale est atteint (ici c'est 2)
      if (PosSeparateur > 0) and (PosSeparateur = Length(edit1.Text)-2) then
     
    // la position d'insertion est elle apres le separateur ?
        if edit1.selstart >= PosSeparateur then
          key := #0;
     
    end;
    enfin si cela peut d'aider

  9. #9
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour à Tous,

    Thierry, tu sais c'est super, avec des commentaires super utiles et très très instructifs !

    Merci !

    J'économise environ 10*9 lignes de code

    Tu penses bien que je vais mettre ton code là oú il faut, en pensant à toi.

    Il fonctionne impec ; je vais simplement tenter de le peaufiner afin de limiter la frappe à une seule virgule. Je pense que c'est désormais à ma portée.

    Je vais poster cela, toute remarque sera très utile...

    @+

  10. #10
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Voilà...

    Je viens aussi de piger autre chose à propos du DecimalSeparator ; il peut se trouver sous la forme d'une virgule (mon cas) ou bien d'un point ; suivant le paramètrage de Windows dans la Panneau de Confiture

    Et certainement plus de fiabilité à utilser ce "DecimalSeparator'' je pense.

    Le code complémentaire en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    //********* LIMITER UNE SEULE virgule...**********//
          /////if pos(',',Edit1.Text) > 0 then  // ma version avec virgule...
           if pos(DecimalSeparator, edit1.Text) > 0 then
       begin
           UneVirgule := true;
              end
          else
         UneVirgule := false;
          // détectin seconde virgule...
        if UneVirgule then
      begin
         /////if pos(',',Edit1.Text) > 0 then  // ma version avec virgule...
        if pos(DecimalSeparator, edit1.Text) > 0 then
         DeuxVirgules := true
        else
          DeuxVirgules := false;
        if DeuxVirgules then
         if not (key in [#8,'0'..'9']) then key:=#0;
    //*****************************************
    (Pour limiter les entrées permises ou non en cet Edit ; là no problème je sais !)

    Merci de vos remarques @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Composant pour gérer les fichiers PDF
    Par BXDSPORT dans le forum Delphi
    Réponses: 4
    Dernier message: 27/05/2007, 08h53
  2. Réponses: 2
    Dernier message: 12/03/2007, 19h07
  3. Réponses: 4
    Dernier message: 06/03/2007, 12h54
  4. limité les décimales d'un float.
    Par YmYannick dans le forum C++
    Réponses: 3
    Dernier message: 22/09/2006, 02h40
  5. Réponses: 6
    Dernier message: 16/09/2005, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo