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

Delphi Discussion :

Problemes de bordures au clic sur une StringGrid


Sujet :

Delphi

  1. #1
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut Problemes de bordures au clic sur une StringGrid
    Bonjour

    j'ai créé une Stringgrid, et j'utilise l'évènement onDrawCell pour changer les bordures sur certaines cellules.
    mais le problème c'est que quand je clique sur une cellule, les bordures reviennent aux bordures par défaut

    j'ai essayé en mettant GoDrawFocusSelected a true ou false ça ne change rien

  2. #2
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Salut
    Bizarre, bizarre, my dear cousin...
    Un clic sur la grille déclenche un événement OnDrawCell...
    Je crois qu'il faudrait que tu montres ton code OnDrawCell !

  3. #3
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    je fait pas mal de truc dans onDrawCell
    j'ai enlevé tout ce qui n'etais pas utile pour vous montrer
    j'utilise la procedure MergedCells trouvée dans la FAQ, que j'ai un peu modifiée

    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
    90
    91
    92
    93
    94
    procedure TFenetrePrincipale.StringGrid_planningDrawCell(Sender: TObject;
      ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    var
      i: Integer;
      Row1,Row2, dessine: integer;
      fusion: boolean;
    begin
     
        // fusion des cellules
        // on recherche les cellules identiques a fusionner, puis on fusionne
        Row1 := 1; Row2 := 1;
        fusion := false;
        if ACol = 0 then
        for i:=1 to StringGrid_Planning.RowCount - 1 do
        begin
             if StringGrid_Planning.Cells[0,i] = StringGrid_Planning.Cells[0,i+1] then
             begin
                  inc(Row2);
                  fusion := true;
             end
             else
             begin
                  inc(Row1); inc(Row2);
                  fusion := false;
             end;
     
             if fusion = false then
             begin
                  if (Row1 <> Row2) and (Row1 <> (Row2+1)) then
                  begin
                       MergedCells(StringGrid_Planning,ACol,ARow,0,Row1-1,0,Row2-1,State);
                       Row1 := Row2;
                  end;
             end;
     
        end;
     
     
    end;
     
    {*------------------------------------------------------------------------------
    Fusionner des cellules
    ------------------------------------------------------------------------------*}
    procedure MergedCells(AStringGrid:TStringGrid;CurrentCol,CurrentRow,Col1,Row1,Col2,Row2:Integer;CurrentState: TGridDrawState);
    var x1,y1,x2,y2:Integer;
        X,Y,i: Integer;
        ARect:TRect;
    begin
      //Initialisations diverses
      ARect:=Bounds(0,0,0,0);
      x1:=Col1;
      y1:=Row1;
      x2:=Col2;
      y2:=Row2;
     
      //On vérifie que la zone fusionnée est valide
      if x1<0 then x1:=0;
      if x2>AStringGrid.ColCount-1 then x2:=AStringGrid.ColCount-1;
      if y1<0 then y1:=0;
      if y2>AStringGrid.RowCount-1 then x2:=AStringGrid.RowCount-1;
      if (x1>x2) or (y1>y2) then
      begin
        Exit;
      end;
     
      for i:= Row1 to Row2-1 do
      begin
      ARect.Left:=AStringGrid.CellRect(1,i).Left;
      ARect.Top:=AStringGrid.CellRect(1,i).Top;
      ARect.Right:=AStringGrid.CellRect(AStringGrid.ColCount,i).Right;
      ARect.bottom:=AStringGrid.CellRect(AStringGrid.ColCount,i).Bottom;
     
      // bordures
      AStringGrid.Canvas.Pen.Color := clWhite;
      AStringGrid.Canvas.Polyline([ point(Arect.left, Arect.bottom) , point(Arect.Right, Arect.bottom) ]);
      end;
     
      //Si la cellule courante est la dernière de la zone de fusion, on dessine dans la fusion le texte de la cellule en haut à gauche
      if ((CurrentCol=Col2) and (CurrentRow=Row2))
      then begin
     
            ARect.Left:=AStringGrid.CellRect(Col1,Row1).Left;
            ARect.Top:=AStringGrid.CellRect(Col1,Row1).Top;
            ARect.Right:=AStringGrid.CellRect(Col2,Row2).Right;
            ARect.bottom:=AStringGrid.CellRect(Col2,Row2).Bottom;
     
            //alignement horizontal
            X:=ARect.Left + (ARect.Right-ARect.Left-AStringGrid.Canvas.TextWidth(AStringGrid.Cells[CurrentCol,CurrentRow])) div 2;
            // alignement vetical
            Y:=ARect.Top + (ARect.Bottom-ARect.Top-AStringGrid.Canvas.TextHeight(AStringGrid.Cells[CurrentCol,CurrentRow])) div 2;
            AStringGrid.Canvas.TextRect(ARect, X, Y, AStringGrid.Cells[Col1,Row1]);
           end;
     
    end;
    je vous montre en image pour mieux comprendre
    j'ai un tableau avec des noms de personnes sur la colonne de gauche, et certaines personnes ont besoin de plusieurs lignes, donc je fusionne les cellules. et pour bien demarquer, je supprime les bordures entre les lignes lorsqu'une personne prend plusieurs ligne
    Pour supprimer une bordure, je la dessine en blanc
    (j'ai effacé le nom des personnes)

    mais voila quand je clique sur une cellule, la bordure se remet
    Images attachées Images attachées  

  4. #4
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    personne ne voit ?

  5. #5
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    je continue a chercher
    j'ai mis un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(inttostr(ACol)+','+inttostr(ARow));
    pour voir si ça passait bien dans toutes les cellules

    apparement une fois que toutes les cellules sont faites, il repasse dans les cellules [3,7], [3,8], [3,9], [3,10] et [3,11] indéfiniment
    mais je ne voit pas du tout ou je rappelle la fonction DrawCell pour qu'elle revienne dans ces cellules là

  6. #6
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    vraiment personne n'a d'idée ?
    pourquoi quand je clique sur une cellule ça redessine les bordures de base ?

    je bloque là dessus depuis 1 semaine...

    Edit -> resolu, finalement je redessine a chaque fois les lignes blanche quand il faut les dessiner
    c'est un bordel monstre mais bon...

  7. #7
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 562
    Points
    3 562
    Par défaut
    Le p'tit bouton est ton ami, cliques dessus... merci

  8. #8
    Membre averti Avatar de jmulans
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 397
    Points : 383
    Points
    383
    Par défaut
    c'est ce que j'ai fait au moment ou j'ai edité

  9. #9
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 562
    Points
    3 562
    Par défaut
    Citation Envoyé par jmulans
    c'est ce que j'ai fait au moment ou j'ai edité
    Pas grave, c'est un post croisé

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

Discussions similaires

  1. Double clic sur une feuille de données
    Par louroulou dans le forum Access
    Réponses: 7
    Dernier message: 14/06/2006, 12h33
  2. Bloquer les clics sur une fenêtre
    Par Enzololo dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 22/05/2006, 23h12
  3. [VRML] Récuperer la position de clic sur une sphere
    Par patmaba dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 10/04/2006, 10h49
  4. Réponses: 12
    Dernier message: 15/12/2005, 14h32
  5. capter l'evenement clic sur une cellule d'un string grid
    Par lasconic dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/06/2003, 11h51

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