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

Bases de données Delphi Discussion :

[DBGrid] Titre des colonnes et canvas


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut [DBGrid] Titre des colonnes et canvas
    Bonsoir,

    Dans mon dbGrid, lorsque je clique sur le titre d'une colonne, cela provoque le tri de cette colonne (ascendant ou descendant).

    Je voudrais dessiner à côté du titre de la colonne une petite flèche qui indiique le sens du tri.

    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
     
      with TCustomADODataSet(DBGridLivres.DataSource.DataSet) do
      begin
        if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort)= 0) then //si le tri est descendant
        begin
          DrawRect:=Rect;
          left:=Rect.Right-20;
          vpos:=Rect.Top+8;
          with dbGrid1.Canvas do  //--> c'est ici que je dois mettre le canvas du titre. Mais comment ?
          begin
            Pen.Color:=clWhite;
            Pen.Width:=1;
            MoveTo(left+4,vpos-4);
            LineTo(left,vpos+4);
            pen.Color:=clGray;
            LineTo(left-4,vpos-4);
            LineTo(left+4,vpos-4);
            pen.Color:=clBlack;
          end;
        end;
    Le code ci-dessus placé dans l'évènement OnDrawColumnCell, affiche bien une petite flèche quand le sens est descendant mais dans chaque ligne de mon dbGrid et pas dans le titre. Or je veux l'inverse : dans le titre et pas à chaque ligne.

    Ma question est : comment a-t'on accès au canvas du titre. Autrement dit : que dois-je mettre à la place de pour que la flèche s'affiche dans le titre et non dans la grille ?

    Merci de m'aider.

    dleu

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Mets ton code dans cette condition.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    If (gdFixed In State) AND (Rect.top = 0) then  
    Begin
    ////ton code
    end;
    GdFixed vise les cellules vides.
    Mais , comme on peut en avoir sur le coté, j'ai remis Rect.top = 0 pour
    en plus prendre celles qui sont en première ligne.

  3. #3
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut
    Merci,

    mais j'obtiens une erreur :
    [Erreur] Unit1.pas(891): Opérateur non applicable à ce type d'opérande
    Autre solution ? Ou correction ?

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    L'erreur ne vient pas de mon code.

    Montre moi la ligne où il y a l' erreur si tu veux.

  5. #5
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut
    Voilà où je l'ai mis :
    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
      with TCustomADODataSet(DBGridLivres.DataSource.DataSet) do
      begin
        //test du sens du tri
        if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort)= 0) then
          If (gdFixed In State) AND (Rect.top = 0) then
        begin
          DrawRect:=Rect;
          left:=Rect.Right-20;
          vpos:=Rect.Top+8;
          with dbGrid1.Canvas do
          begin
            Pen.Color:=clWhite;
            Pen.Width:=1;
            MoveTo(left+4,vpos-4);
            LineTo(left,vpos+4);
            pen.Color:=clGray;
            // etc .....................
    Mais le problème qui se pose, à mon avis, c'est que je travaille dans le mauvais canvas : dbGrid1.Canvas donne le canevas des lignes de la grille et pas le canevas de la ligne des titres.

    dleu

  6. #6
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut
    Voilà mon code actuellement :
    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
     
      If (gdFixed In State) AND (Rect.top = 0) then
      with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
      begin
        //test du sens du tri
        if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort)= 0) then
        begin
          DrawRect:=Rect;
          left:=Rect.Right-20;
          vpos:=Rect.Top+8;
          with dbGrid1.Canvas do
          begin
            Pen.Color:=clWhite;
            Pen.Width:=1;
            //   .../...
    Je n'ai plus d'erreur à l'exécution, mais je n'ai plus l'affichage de ma flèche.

    Y a-t'il quelqu'un qui aurait la réponse à mon problème ?

  7. #7
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut
    Eh bien ?????

    Tout le monde est parti ?

    Sans blague, j'ai passé tout le week-end là-dessus. Je ne trouve aucune solution. J'ai vraiment besoin d'aide.

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    En fait, le composant TDbGrid n'est pas tres approprié pour dessiner dedans.

    Je viens de remarquer aussi que je n'arrive pas à aller dans le Canvas des cellules fixes.

    J'espère que quelqu'un poura mieux t'aider que moi.

    Sorry.

    Ps : Essaie peut être un autre compo DbGrid mieux adapté pour cela.
    Ou alors, pas tres propre, mettre un TImage sur chaque colonne et gérer les flêches par là...

  9. #9
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut
    Merci pour ton aide.

    J'espère que quelqu'un va avoir une idée car je crois bien avoir tout essayé.

Discussions similaires

  1. Modifier le titre des colonnes d'une DBGrid
    Par deubal dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/11/2005, 17h15
  2. Affichage du titre des colonnes dans un DBGrid
    Par Debure dans le forum C++Builder
    Réponses: 6
    Dernier message: 05/10/2005, 23h41
  3. [VB.NET] DataGrid : titre des colonnes sur deux lignes
    Par Lahouari dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/12/2004, 14h44
  4. DBGrid, comment dessiner dans les titres des colonnes
    Par dleu dans le forum Bases de données
    Réponses: 9
    Dernier message: 04/11/2004, 17h49
  5. [dbGrid]Image dans le titre des colonnes d'un dbGrid
    Par dleu dans le forum Bases de données
    Réponses: 1
    Dernier message: 31/08/2004, 18h01

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