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

Lazarus Pascal Discussion :

Formater le contenu d'une cellule de stringgrid en monétaire


Sujet :

Lazarus Pascal

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Formater le contenu d'une cellule de stringgrid en monétaire
    Salut

    je voudrais formater les nombres contenus dans les cellules d'un stringgrid
    en tenant en compte les séparateurs de milliers.
    Donc, après avoir tapé "1000" et validén on doit avoir "1 000".
    J'utilise le code suivant dans la procedure OnDrawCell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TVentAnalFrm.FormatNombres(Sender: TObject; ACol,ARow: Integer; Rect: TRect; State: TGridDrawState);
    begin
             Canvas.Pen.Style := psClear;
             Canvas.Rectangle(Rect);
             Canvas.TextOut(Rect.Right - Canvas.TextWidth(Cells[ACol, ARow])-10,
                Rect.Top,  FormatFloat('#,##0',StrtoFloat(Cells[ACol, ARow])));
    end;
    A l'exécution, je remarque que la valeur initiale saisie et la valeur formatée
    apparaissent toutes deux dans la cellule.
    La cellule n'est donc pas vidée avant le dessin sur le canvas.
    Mais quand je double clique sur la cellule pour l'éditer, la valeur formatée disparaît et l'édition se fait sur la valeur initiale.

    Avez-vous une solution ?

  2. #2
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Bonjour,

    Dans ton cas et avant d'utiliser la cellule, l'idée est d'effacer physiquement le contenu du rectangle défini par la variable Rect de la procédure.

    Canvas.FillRect(Rect);
    Ensuite tu fais ce que tu veux pour afficher du texte, une image, etc....

    Cordialement,
    Chris

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Bonjour

    J'ai utilisé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TVentAnalFrm.FormatNombres(Sender: TObject; aCol, aRow: Integer;
       aRect: TRect; aState: TGridDrawState);
    begin
      with TStringGrid(Sender) do
        if (ACol = 1) and (Arow <> 0) and (Cells[Acol,Arow] <> '') then
          begin
             Canvas.FillRect(aRect);
             Canvas.Pen.Style := psClear;
             Canvas.Rectangle(aRect);
             Canvas.TextOut(aRect.Right - Canvas.TextWidth(Cells[ACol, ARow])-10,
                aRect.Top,  FormatFloat('#,##0',StrtoFloat(Cells[ACol, ARow])));
     
          end;
    end;
    mais le problème demeure. Que faire ?

  4. #4
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    Pourquoi utiliser OnDrawCell et ne pas tout simplement mettre la chaine reformatée dans la case, soit au remplissage de la grille, soit après saisie et validation de la cellule (à détecter par un événement, qui dépend de la version de Lazarus).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells[ ACol,ARow] := FormatFloat('###,##0', Valeur );
    Il faut bien sûr spécifier un alignement à droite pour cette colonne ou cellule. On peut aussi spécifier un masque de saisie, ce qui simplifie les choses encore, mais n'est pas toujours bien apprécié des utilisateurs.
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

Discussions similaires

  1. [XL-2007] VBA - Comment cacher le contenu d'une cellule grace au format de cellule
    Par Joeytriviani dans le forum Excel
    Réponses: 4
    Dernier message: 16/04/2014, 09h05
  2. [WD-2000] Modifier format du contenu d'une cellule liée à un texte
    Par Oh_Oui dans le forum Word
    Réponses: 10
    Dernier message: 07/07/2010, 13h55
  3. [VBA]Copier le contenu d'une cellule d'un autre classeur
    Par dudu59 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 01/02/2006, 17h08
  4. Réponses: 3
    Dernier message: 27/01/2006, 18h35
  5. Importer le contenu d'une cellule Excel vers Access
    Par deaqu1 dans le forum Access
    Réponses: 7
    Dernier message: 05/11/2005, 15h26

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