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 :

Comment modifier la couleur du header du TListView ?


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par défaut Comment modifier la couleur du header du TListView ?
    Bonjour,

    J'essaie de changer la couleur des en-têtes des colonnes dans un TListview. Je sais que pour y arriver je dois "override" la procédure WndProc et traiter les événements WM_PAINT ou WM_DRAWITEM (si j'ai compris un peu)

    Mais le problème est que je ne comprends pas très bien comment s'occuper des "handles2 et des messages pour être capable de changer la couleur où faire quelque chose d'autre.

    Je serais heureux si quelqu'un pouvait me donner un exemple ou me donner des liens sur un tutorial. Je remercie d'avance cette personne pour son aide.

    J'ai trouvé peu de choses sur internet sur ce cas. quelques exemples où les font étaient changés. D'autres où ils redessinaient les cellules du listview. Mais rien me donnant vraiment un exemple comment redessiner sur un WM_PAINT ou WM_DRAWITEM et comment gérer correctement ces messages.

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    Je vais regarder mais appriori tu n'a pas besoin de faire ca, il suffit d'utiliser le'evenement Ondrawitem tout simplement et de modifier la couleur de ton brush lors du dessin sur le canvas.
    [Edit] Heuuu apres 2-3 recherches je suis deja bien moins optimiste ... [/Edit]
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Re
    Voila deja un debut ... ca met en gras le text des headers

    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
    procedure TForm1.Button1Click(Sender: TObject);
    const
      LVM_GETHEADER = LVM_FIRST + 31;
    var
      LF: TLogFont;
      hHeader, hCurrFont, hOldFont, hHeaderFont: THandle;
    begin
      {to get the windows handle for header}
      hHeader := SendMessage(ListView1.Handle, LVM_GETHEADER, 0, 0);
     
      {to get the handle for header font}
      hCurrFont := SendMessage(hHeader, WM_GETFONT, 0, 0);
     
      {to get the LOGFONT with font details}
      if GetObject(hCurrFont, SizeOf(LF), Addr(LF)) > 0 then
      begin
        {set our custom attributes. I set a bold and underlined font style}
        LF.lfWeight := FW_BOLD;
        LF.lfUnderline := 1;
     
        {create a new font for the header control to use.
         This font must NOT be deleted until it is no
         longer required by the control, typically when
         the application will be closed or when a new font
         will be applied to header}
        hHeaderFont := CreateFontIndirect(LF);
     
        {to select the new font}
        hOldFont := SelectObject(hHeader, hHeaderFont);
     
        {to notify the listview header about changes}
        SendMessage(hHeader, WM_SETFONT, hHeaderFont, 1);
      end;
     
    end;
    Faut mettre CommCtrl dans les uses

    [Edit2]Un pas de plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      {to get the current style attributes for the header}
      style := GetWindowLong(hHeader, GWL_STYLE);
    avec style : dWord

    + une piste

    http://support.microsoft.com/kb/178491/fr
    [/Edit2]

    [Edit3]
    Désolé je trouve pas
    [/Edit3]

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par défaut
    Tout d'abord merci pour tes réponses. L'article que tu cites (le code). Je l'avais trouvé, mais changé la fonte, la couleur du texte ne m'intéresse pas. Ce que je veux, est être capable de changer la couleur de mon header.

    Je pense avoir une solution, si ça marche (pas encore testé), je la posterai ici. D'autres propositions sont toujours les bienvenues.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 14
    Par défaut
    Hmmm ma solution ne semble pas fonctionner. cela consistait à effectuer des opérations avec le message WM_DRAWITEM dans la procédure wndProc. Mais je dois m'y prendre mal. Vais refaire des test.

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    Humm j'ai regarder du cote de WindowsProc qui paraissait etre une bonne idée, mais le problrme est que si tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Procedure MaProcedure(Message : TMessage);
    [...]
    ListView1.WindowProc := MaProcedure;
    Tu bloques tous les messages et le control ne se redessine plus ... enfin presque plus ... les headers ne sont pas affectés, ils sont mis a jour autrepart ... mais je sais pas ou.

    [Edit]
    J'ai peut etre trouvé une autre piste
    http://www.swissdelphicenter.ch/torr...de.php?id=2133
    En particulier la function Header_GetItem
    [/Edit]

    [Edit2]
    Arrrgggg, non désolé j'abandonne, je trouve vraiment pas, a chaque fois sur toutes les piste c'est le meme probleme, y'a pas la possibilité(ou je ne la trouve pas) de passer un parametre pour influer sur la couleur de fond, et pas possible non plus (ou j'ai pas trouvé )d'utiliser directement le canvas...
    Bon courrage, mais j'ai vu dans une discution sur ce forum un autre compo qui apprement le gere, le TMsListView de memoire (gratuit ?).
    A++
    Qwaz
    [/Edit]

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. [C#][ProgressBar] Comment modifier les couleurs ?
    Par wiLL_ dans le forum Windows Forms
    Réponses: 6
    Dernier message: 11/02/2006, 15h55
  2. Comment modifier la couleur d'un mot dans un tableau ?
    Par noxious dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/11/2005, 14h05
  3. Comment modifier les couleurs de Windows ?
    Par Harry dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 29/09/2005, 10h55
  4. Comment modifier les couleurs système ?
    Par yousserr dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 24/07/2005, 11h57
  5. Comment modifier la couleur du texte sélectionné ?
    Par VincentR dans le forum Composants VCL
    Réponses: 4
    Dernier message: 14/06/2005, 23h29

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