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 :

[D6] Utiliser OnDrawItem d'une ListBox !?


Sujet :

Composants VCL Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 680
    Points : 7 100
    Points
    7 100
    Par défaut [D6] Utiliser OnDrawItem d'une ListBox !?
    Comment utiliser l'évènement OnDrawItem d'une ListBox ?

    Mon but est d'avoir le fond de ma ListBox en noir, avec une police de couleur claire.
    J'ai donc fait comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TMainForm.ListBoxCtrlEspaceDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
    begin
       ListBoxCtrlEspace.Canvas.Brush.Color := _CouleurF;
       ListBoxCtrlEspace.Canvas.Pen.Color := _Couleur;
       ListBoxCtrlEspace.Canvas.Font.Color := _Couleur;
       ListBoxCtrlEspace.Canvas.TextRect(Rect, 2, 2, ListBoxCtrlEspace.Items[Index]);
    end;
    Et j'obtiens une ListBox noire ... et vide.
    Je ne comprend pas.

    Comment faut-il s'y prendre ?


  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    As-tu mis OwnerDraw à true?

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 680
    Points : 7 100
    Points
    7 100
    Par défaut
    Tu veux dire Style à lbOwnerDrawFixed ?
    Oui.

    Quand ma ListBox est motivée, elle condescend à m'afficher le texte de ma première ligne. Mais pas plus.


  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Bon ben questions idiotes suivantes:
    Est-ce que _Couleur et _CouleurF sont correctement assignées?

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 680
    Points : 7 100
    Points
    7 100
    Par défaut
    Oui.
    Je viens de refaire un test vite-fait dans un nouveau projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.ListBoxCtrlEspaceDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
    begin
       ListBoxCtrlEspace.Canvas.Brush.Color := clBlack;
       ListBoxCtrlEspace.Canvas.Pen.Color := clLime;
       ListBoxCtrlEspace.Canvas.Font.Color := clLime;
       ListBoxCtrlEspace.Canvas.TextRect(Rect, 2, 2, ListBoxCtrlEspace.Items[Index]);
    end;

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Je ne connais pas bien TextRect ( ) mais essaie de décomposer pour voir ce qui ne va pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.ListBoxCtrlEspaceDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); 
    begin
      with ListBoxCtrlEspace.Canvas do
      begin
        Brush.Color := clRed; //met rouge pour voir le changement.
        //Si tu mets noir, tu ne sauras pas s'il a bien fait l'opération ou s'il a mis une couleur par défaut...
        Pen.Color := clLime; 
        Font.Color := clBlue;
        Rectangle(Rect);
        TextOut(Rect.Left,Rect.Top,ListBoxCtrlEspace.Items[Index]);
    end;
    Là comme ça, chez moi ça devrait marcher...

  7. #7
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 680
    Points : 7 100
    Points
    7 100
    Par défaut
    Ca marche !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        ListBoxCtrlEspace.Canvas.Brush.Color := clBlack;
        ListBoxCtrlEspace.Canvas.Pen.Color := clBlack;
        ListBoxCtrlEspace.Canvas.Font.Color := clLime;
        ListBoxCtrlEspace.Canvas.Rectangle(Rect);
        ListBoxCtrlEspace.Canvas.TextOut(Rect.Left, Rect.Top, ListBoxCtrlEspace.Items[Index]);


    Par contre, je ne vois pas bien ce qui n'allait pas ...


  8. #8
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Lung
    Mais de rien

    Citation Envoyé par Lung
    Par contre, je ne vois pas bien ce qui n'allait pas ...
    Ben moi non plus figure-toi... Je pense qu'il faudrait potasser l'aide pour TextRec parce que visiblement, c'est là qu'il y a(avait) un problème...
    Mais je ne le connais pas, je n'utilise jamais TextRec...

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

Discussions similaires

  1. Utiliser scrollbar d'une ListBox par le code
    Par Ametisse63 dans le forum MFC
    Réponses: 1
    Dernier message: 30/11/2010, 17h07
  2. Réponses: 5
    Dernier message: 05/10/2006, 10h18
  3. Réponses: 2
    Dernier message: 26/07/2006, 12h46
  4. question sur l'utilisation d'une listBox
    Par Mickey.jet dans le forum Delphi
    Réponses: 3
    Dernier message: 02/06/2006, 17h57
  5. [RadASM/MASM32] Utilisation d'une Listbox
    Par Kef dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 26/09/2005, 23h35

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