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 :

Habiller un ListView


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 332
    Par défaut Habiller un ListView
    Bonjour,

    Je voudrais savoir comment ils ont fait pour faire un ListView de ce type (car j'aimerai bien l'inclure dans mon application) :
    http://site.magix.net/index.php?id=2...jpg&no_cache=1
    Le listview a les bords arrondis, et le scrollbar est détaché.

    Est-ce que quelqu'un connait un composant permettant de faire ca, ou un skin ?

    Ou alors quelqu'un aurait une idée sur la façon de procéder pour essayer de le refaire ?

    Merci
    Fred

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Pour ce qui est des bords arrondis, regardes du côté de :
    . CreateRoundRectRgn(...)
    . SetWindowRgn(...)

    et vois si ceci est applicable au handle d'un object tel qu'un TListView. Pas sur, puisque je n'ai utilisé ceci que pour des objects de type TForm mais sait on jamais....

    Pour le coup du ScrollBar, je ne sais pas mais en regardant de plus pres j'ai un peu envie de dire que même le coup des arrondis est surement un peu plus 'complexe' que ce que j'avais entrevu du bout de l'oeil...

    Mais peut être que dans la fonction CreateRoundRectRgn(...), tu pourras exclure, grace aux paramètres des coordonnées, toutes les zones non-clients telles que les ScrollBars.

    En espérant t'aider,
    Bon courage,
    @ +

  3. #3
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Si ce type d'objet est introuvable, on peut le faire en dérivant d'un TCustomControl.
    Pour dessiner le contenu, il suffit de surcharger la méthode Paint.

    L'idée est de remplir avec la couleur de fond du Parent, donnée par Parent->Brush->Color

    Puis de dessiner des RoundRect avec comme rayons : 8 et 8.

    Les méthodes événementielles (OnMouseDown, OnMouseMove et OnMouseUp) permettent de mettre en place les différentes actions pour créer le scrolling !

    En rajoutant un TStringList à l'objet, il ne reste plus qu'à dessiner les chaînes et objets (s'il y en a) en lieu et place...avec TextOut

    Donc pour la mise en chantier (graphique), voir l'aide TCustomControl,TCanvas.

    A plus !

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 332
    Par défaut
    Bonjour,

    Merci pour vos réponses.
    Je vais essayer vos conseils.

    Fred

  5. #5
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Juste comme simple exemple pour le dessin des contours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class jListBox : public TCustomControl
    {
    private :
    Graphics::TBitmap *Bitmap;
    public :
    TStringList *Items;
    //D'autres propriétés sans doute...
    //...
        __fastcall jListBox(TComponent *Owner);
        __fastcall ~jListBox();
        void __fastcall Paint();
    };

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    __fastcall jListBox::jListBox(TComponent *Owner)
        : TCustomControl(Owner)
    {
    if(Owner->InheritsFrom(__classid(TWinControl))) Parent = (TWinControl*)Owner;
    Bitmap = new Graphics::TBitmap;
    Items = new TStringList;
    SetBounds(20,20,200,200);
    }
     
    __fastcall jListBox::~jListBox()
    {
    delete Bitmap; Bitmap = NULL;
    Items->Clear(); delete Items;
    }
     
    void __fastcall jListBox::Paint()
    {
    if(Bitmap != NULL)
        {
        //Ajuster les dimensions du bitmap sur celles de l'objet
        int we = Width;
        int he = Height;
        if(Bitmap->Width != we) Bitmap->Width = we;
        if(Bitmap->Height != he) Bitmap->Height = he;
        //Le dessin se fait sur le bitmap
        TCanvas *C = Bitmap->Canvas;
        //Effacer avec la couleur de fond du parent
        C->Brush->Color = Parent->Brush->Color;
        C->Brush->Style = bsSolid;
        C->FillRect(Rect(0, 0, we, he));
        //Dessiner le rectangle arrondi de la listbox
        C->Brush->Color = (TColor)0x00FFDFBF;
        C->Pen->Color = clSilver;
        C->Pen->Style = psSolid;
        C->Pen->Mode = pmCopy;
        C->RoundRect(4,4,Width - 20, Height - 20, 8,8);
        //Dessiner le texte...
        //...
        //...
        //Dessiner le corps du slider vertical
        C->RoundRect(Width-16, 4, Width-4, Height-20, 8,8);
        //dessiner le corps du slider horizotal
        C->RoundRect(4, Height-16, Width - 20, Height-4, 8,8);
        C->Brush->Color = (TColor)0x00FF8306;
        //dessiner le bouton du slider vertical
        C->RoundRect(Width-16, 4, Width-4, 24, 8,8);
        //dessiner le bouton du slider horizontal
        C->RoundRect(4, Height-16, 24, Height-4, 8,8);
        //S'il faut rajouter des bords 3D, ce serait ici...
        //...
        //Dessiner le bitmap dans la zone client de l'objet
        Canvas->Draw(0, 0, Bitmap);
        }
    }
    Et pour mon test, donc pour voir ce que ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    jListBox *ListBox;
     
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    ListBox = new jListBox(this);
    }
    Pour les événementielles, à toi de jouer ...

    Il faut se méfier de ce que font les autres, certains peuvent travailler au niveau graphisme sans jamais utiliser d'objets du type TWinControl etc., en dessinant directement sur la form...

    A plus !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Par défaut
    Bonjour,

    Je vous remercie pour ce code, mais le probleme c'est que l'on ne peut plus rien modifier au composant, qui c'est transformer en Bitmap en fait non ?
    En tout cas, je ne vois plus d'items et les scroll ne fonctionne pas.

    Cordialement,
    FluidBlow.

Discussions similaires

  1. [Kylix] prob listview
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 22/10/2002, 21h37
  2. Une gauge dans un ListView
    Par Thom@s dans le forum Composants VCL
    Réponses: 3
    Dernier message: 22/10/2002, 10h32
  3. listview ??
    Par Galdarion dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/09/2002, 17h02
  4. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49
  5. ListView
    Par SnickeursMan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/08/2002, 10h42

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