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 :

redessiner le dbgrid


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut redessiner le dbgrid
    bonjours
    ce code me permet jute d'afficher une barre dans la partie titre du dbgrid
    et de colorier la colonne moi je veut mettre une image ex fléche indiquant le sens du trie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (DataCol=fdatamodule.col) then
          begin
             grille.Canvas.Pen.Color:= clRed;
             grille.Canvas.MoveTo(Rect.Right - 9, 12);
             grille.Canvas.LineTo(Rect.Right - 1, 4);
             grille.Canvas.Brush.Color := clCream;
             grille.Canvas.Font.Color := clBlack;
          end;
       grille.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    j'aimerai bien une aide SVP "merci"

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    Salut

    Bon c'est pas si simple que ça
    voila une astuce qui fonctionne selon certaine condition
    le titre de dbgrid ne doit pas etre en gras

    pour faire cela, il faut que tu fasse

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    const
      TailleTriangle = 12;
    type
      TSortDirection = (sdNone, sdDescending, sdAscending);
     
    // pour le agrandir la zone afin de pouvoir placer la fleche
    Procedure AjusteTitle(Column : TColumn);
    var
      i   : integer;
      Gri : TDbGrid;
    Begin
      Gri := Column.grid as TDbGrid;
      if assigned(Gri) Then
      begin
        for i := 0 to Pred(Gri.Columns.Count) do
        begin
          if [fsBold] = Gri.Columns[i].Title.Font.Style  Then
          begin
            Gri.Columns[i].Title.Alignment := taCenter;
            Gri.Columns[i].Width := Gri.Columns[i].Width - TailleTriangle;
          end;
          Gri.Columns[i].Title.Font.Style := [];
        end;
      end;
      Column.Title.Alignment := taLeftJustify;
      Column.Width    := Column.Width + TailleTriangle;
      Column.Title.Font.Style := [fsBold];
    end;
     
    // pour le dessin de la fleche
    procedure DrawFlecheorder(Sender: TObject;Afont : Tfont;Rect : Trect;Sort : TSortDirection);
    var
      r: TRect;
      h: integer;
      t: array[0..2] of TPoint;
    begin
      with (Sender as TDBGrid), Canvas do
      begin
        // Get the header rectangle
        r := Rect;
        OffsetRect(r, 0, -r.Top);
        // Set triangle vertex points
        h := r.Bottom - r.Top;
        h := h div 4;
     
        if sort = sdAscending Then
        begin
          t[0].X := r.Right - h;
          t[0].Y := r.Top + 3*h;
          t[1].X := r.Right - 3*h;
          t[1].Y := r.Top + 3*h;
          t[2].X := r.Right - 2*h;
          t[2].Y := r.Top + h;
        end
        else
         if sort = sdDescending Then
         begin
           t[0].X := r.Right - h;
           t[0].Y := r.Top + h;
           t[1].X := r.Right - 3*h;
           t[1].Y := r.Top + h;
           t[2].X := r.Right - 2*h;  //pointe
           t[2].Y := r.Top + 3*h;
         end;
        // Draw triangle for down arrow
        Brush.Color := AFont.color;
        Polygon(t);
      end;
    end;
     
    Procedure OrderQuery(Column : TColumn;Sort : TSortDirection);
    var
      Gri : TDbGrid;
      Quer : TQuery;
      Order : String;
    Begin
      Gri := Column.grid as TDbGrid;
      Quer := Gri.DataSource.dataset as TQuery;
      Quer.Close;
      Order := '';
      if sort = sdAscending Then
       Order :=  'order by  '+Column.FieldName+' Asc'
      else
       if sort = sdDescending Then
         Order :=  'order by '+Column.FieldName+' Desc'
      if trim(Order) Then
        Quer.SQL[Quer.SQL.Count-1] := Order;
      Quer.open;
    end;
    les choses serieuses commence

    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
     
    TMaForm = Class(
    ...
     forder : TSortDirection;
    ...
    End;
    Implementation
    ...
     
    Procedure TMaForm.MyDbGridDrawColumnCell(Sender: TObject;  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      ...
      if [fsBold] = Column.Title.Font.Style  Then
      begin
        DrawFlecheorder(sender,Column.Title.Font,Rect,forder);
      end;
    End;
     
    procedure TMaForm.MyDbGridTitleClick(Column: TColumn);
    begin
       if (forder =sdNone)  Then
           forder := sdDescending 
        else
          if (forder = sdDescending)  Then
             forder :=  sdAscending
          else
              forder := sdNone  ;
     
       AjusteTitle(Column);
       OrderQuery(Column,forder); 
    end;
    @+ Phil

    PS : met le tag resolue a tes deux message si la solution te convient
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut redessiner un dbgrid
    tout marche merci beaucoup ourah!!!!!!!

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

Discussions similaires

  1. DBLookupComboBox dans DBGrid
    Par KThrax dans le forum Bases de données
    Réponses: 7
    Dernier message: 24/08/2004, 15h18
  2. A propos du composant DBGrid
    Par _Rico_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/07/2002, 09h18
  3. Couleur des lignes dans DBGrid
    Par eddie dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/06/2002, 18h15
  4. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18
  5. [Kylix] Contrôle DBGrid
    Par KThrax dans le forum EDI
    Réponses: 1
    Dernier message: 10/05/2002, 14h18

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