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

C++Builder Discussion :

Aligner les nombres et les d�caler � droite c++ builder starter


Sujet :

C++Builder

  1. #1
    Membre confirm�
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par d�faut Aligner les nombres et les d�caler � droite c++ builder starter
    Bonsoir,

    Comment d�caler les nombres vers la droite pour obtenir par exemple ce r�sultat ?
    142,95
    9847,32
    0,15
    Merci d'avance.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {  
     double x = 9992112.78787;
     double z = 14782.258;
    ListBox1->Items->Add(FloatToStrF(x,ffFixed,10,2));   // 2 chiffres après la virgule
    ListBox1->Items->Add(FloatToStrF(z,ffFixed,10,2));
    }
    Dans ce code, les nombres ne sont pas align�s les uns en-dessous des autres et sont � gauche.

  2. #2
    Membre actif
    Homme Profil pro
    Coll�gien
    Inscrit en
    F�vrier 2016
    Messages
    20
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 31
    Localisation : France, Seine et Marne (�le de France)

    Informations professionnelles :
    Activit� : Coll�gien
    Secteur : Alimentation

    Informations forums :
    Inscription : F�vrier 2016
    Messages : 20
    Par d�faut
    J'ai cherch� si il y avait une propri�t� pour TListBox et je n'en ai pas trouv�.
    Si son seul but est l'affichage justifi� � droite alors un TMemo fera l'affaire gr�ce � sa propri�t� "Alignment".

  3. #3
    Membre confirm�
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par d�faut
    Citation Envoy� par Maliono Voir le message
    J'ai cherch� si il y avait une propri�t� pour TListBox et je n'en ai pas trouv�.
    Si son seul but est l'affichage justifi� � droite alors un TMemo fera l'affaire gr�ce � sa propri�t� "Alignment".

  4. #4
    Membre confirm�
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par d�faut aligner des chiffres � droite
    Citation Envoy� par Maliono Voir le message
    J'ai cherch� si il y avait une propri�t� pour TListBox et je n'en ai pas trouv�.
    Si son seul but est l'affichage justifi� � droite alors un TMemo fera l'affaire gr�ce � sa propri�t� "Alignment".

    Merci Maliono,

    En Delphi Pascal, la fonction Str permet d'aligner les chiffres sur n'importe quel composant . en C++, je ne sais pas si il y a un l'�quivalent.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    D'abord v�rifier si TCanvas dispose d'une m�thode DrawText qui s'appuierait sur le m�me principe que celle des API WINDOWS !
    Cette fonction aligne le texte dans un RECT (TRect chez toi) aussi bien en horizontal qu'en vertical.

    Si �a n'existe pas, dans ce cas il est n�cessaire d'utiliser OnDrawItem donc en fixant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ListBox1->Style = bOwnerDrawFixed;
    Apr�s, il faut coder dans la :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index,
          TRect &Rect, TOwnerDrawState State)
    {
    }
    L'id�e est alors de d�velopper un code o� l'on va reculer d'une strate : on passe de BCB aux API WINDOWS
    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
     
    // Un TRect WINDOWS qu'il faudra initialiser avec le &Rect (à moins que ce soit compatible...)
    RECT rc; 
    // On récupère le HWND de la ListBox
    HWND hwnd = Control->Handle;
    // on récupère de HDC de HWND
    HDC hdc = GetDC( hwnd );
    // donc on initialise ce qui doit l'être :
    rc.left   =
    rc.top    = 
    rc.right  = 
    rc.bottom =
    // Effacer / coloriser le fond en fonction de la valeur de State
    FillRect(hdc, &rc, couleur_de_fond); // couleur_de_fond est un RGB ou un COLORREF
    // On va écrire en mode transparent pour ne pas altérer la couleur de fond :
    SetBkMode(hdc, TRANSPARENT);
    // En fonction de la couleur du fond... donc en partie en fonction de State ...on fixe la couleur du texte
    SetTextColor(hdc, couleur_du_texte); // couleur_du_texte est un RGB ou un COLORREF
    // On affecte ensuite au hdc la fonte du ListBox en récupérant son HFONT
    SelectObject(hdc, Canvas->Font->Handle);
    //...
    //... normalement yapluka :
    // L'API WINDOWS où Text est la chaîne à afficher çàd un pointeur vers tableau de char
    DrawText(hdc, Text, -1, &rc, DT_SINGLELINE | DT_RIGHT | DT_VCENTER);
    // On en a terminé donc on rend le hdc
    ReleaseDC( hdc );
    la valeur DT_RIGHT (aligner � droite) peut aussi �tre DT_LEFT (aligner � gauche) ou DT_CENTER (centrer entre rc.left et rc.right)
    la valeur DT_VCENTER centre verticalement entre rc.top et rc.bottom.

    Il faudrait tester (je vais essayer de mon cot�)!
    Tout d�pend de ce que l'on peut faire dans la hi�rarchie des proc�dures graphiques BCB/WINDOWS
    A ce stade, est-ce que BCB va r�ussir � compiler � la bonne place et donc, au bon moment (en termes d'ex�cution) le OnDrawItem ?

    A plus !

  6. #6
    Membre confirm�
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    132
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 132
    Par d�faut d�calage
    Salut,

    Merci pour la r�ponse.

    J'ai trouv� setw() qui agit sur la largeur (gabarit) qui varie selon la valeur donn�e � setw()

    Il faut inclure #include<iomanip> et using namespace std;Cela fonctionne en c++ "classique". Ex :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    double ttc, remise;
    cout << setw(20) << "prix ttc = " << setw(12) << ttc << "\n";
    cout << setw(20) << "remise = "  << setw(12) << remise << "\n";
    Par contre, je ne trouve pas comment utiliser setw() avec un composant (listbox ou autre) avec builder.

    A+

Discussions similaires

  1. [VB.NET] Les tableaux et les nombres al�atoires
    Par stracoma dans le forum D�buter
    R�ponses: 1
    Dernier message: 24/06/2016, 01h34
  2. les consts ou les nombres
    Par Dr walid dans le forum D�buter
    R�ponses: 5
    Dernier message: 05/11/2009, 21h44
  3. R�ponses: 1
    Dernier message: 29/08/2007, 10h31
  4. R�ponses: 11
    Dernier message: 01/05/2007, 00h15

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