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

C++Builder Discussion :

Hachurer une case d'un StringGrid


Sujet :

C++Builder

  1. #1
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut Hachurer une case d'un StringGrid
    Bonjour, je souhaiterais hachurer les cellules sélectionnées d'un StringGrid le soucis c'est que j'ai esasyé en changeant le style du Brush et j'obtient un fond noir.

    Je m'explique: le code suivant hachure les cellules sélectionnées de la colonne 1 mais le trait est blanc est le fond de remplissage est noir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      if( ACol == 1 && ARow <= StringGrid->Selection.Bottom && ARow >= StringGrid->Selection.Top)
      { // Concerne la(les) cellule(s) sélectionnée(s).
          StringGrid->Canvas->Brush->Color = clWhite;
          StringGrid->Canvas->Pen->Color   = clWhite;
          StringGrid->Canvas->Pen->Style   = psClear;
          StringGrid->Canvas->Brush->Style = bsFDiagonal;
          StringGrid->Canvas->FillRect(Rect);
          StringGrid->Canvas->Brush->Style = bsSolid;
          StringGrid->Canvas->Pen->Style   = psSolid;
      }
    Pour ceux qui me diront d'aller regarder dans la FAQ, j'ai déjà vu ce liens où il est expliqué comment personnaliser une StringGrid dont je me suis très largement inspiré.

    mais ce genre de remplissage n'est pas effectué.

    Merci pour vos idées, vos pistes ou tout autre indice qui pourrait corriger ce léger bug.

  2. #2
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    As tu essayé de changer la taille du Pen avec width?

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut bandit boy:
    Je pense que tu a le meme probleme que dans le post dont j'ai mis le lien
    et tu fait un dessin de hachures que tu inserre de plus tu peu ecrire dessus.

  4. #4
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut Un p'tit quadrillage ... ?
    Bonsoir,

    Un piste peut être :
    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
     
    void __fastcall TForm2::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
    	  TRect &Rect, TGridDrawState State)
    {
    //
    TRect nRect;
    nRect.Top = Rect.Top;
    nRect.Bottom = Rect.Bottom;
    nRect.Left = Rect.Left;
    //
    TRect hRect;
    hRect.Left = Rect.Left;
    hRect.Right = Rect.Right;
    hRect.Top = Rect.Top;
    if (ACol == 2 && ARow == 2)
    {
    //
    	int i = 6;
    	while (i < (Rect.Right - Rect.Left))
    	{
    	nRect.Right = Rect.Left + i;
    	DrawEdge(StringGrid1->Canvas->Handle, &nRect,EDGE_BUMP , BF_RIGHT );
    	i = i + 6;
    	}
    	//
    	i = 6;
    	while (i < (Rect.Bottom - Rect.Top))
    	{
    	hRect.Bottom = Rect.Top + i;
    	DrawEdge(StringGrid1->Canvas->Handle, &hRect,EDGE_BUMP , BF_BOTTOM );
    	i = i + 6;
    	}
     
    //
    }
    }

    Bon, c'est pas forcement 'génial' mais bon ...ça doit s'améliorer.

    En espérant t'aider,
    @ +

  5. #5
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Alors, dans l'ordre:
    Masmeta, j'ai testé en changeant le Pen->Width mais ca ne change rien.
    blondelle, c'est pas tout à fait le truc puisque j'ai déjà des dessins sur le Canvas et donc l'image de fond soit ne se verra pas, soit écrasera la couleur de la cellule.
    Sunchaser, c'est ce que je veux faire, mais les hachures ne sont pas sur la case colorié (surement un petit réglage) et reste à les mettres en diagonale pour plus d'esthétique.
    J'y travail.

    Merci

  6. #6
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Merci à tous.
    J'ai modifié ton code blondelle pour arriver au suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
          int i = -7;
          while (i < Rect.Right)
          {
               nRect.Left   = nRect.Right;
       	   nRect.Right  = Rect.Left + i;
               nRect.Top    = Rect.Top;
               nRect.Bottom = Rect.Bottom;
    	   DrawEdge(StringGrid->Canvas->Handle, &nRect,EDGE_BUMP , BF_DIAGONAL );
    	   i += 8;
          }
    Avec ca, j'ai des hachures sur les cases sélectionnées, et je supprimes la couleur de fond des cases sélectionnées avant, résultat la sélection est uniquement hachurée, pile poile ce que je voulais.

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut bandit boy:
    Je vais rendre a Jules ce qui appartient a Cesar , je pense que c'est Sunchaser qui ta oriente pour ton code, mais l'essentiel c'est de trouver une solution.

  8. #8
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Pardon
    Toutes mes excuses Sunchaser, j'ai tapé plus rapidement que j'ai réfléchis.
    Milles excuses

  9. #9
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    No problemo !

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

Discussions similaires

  1. tester le vide d'une case de StringGrid
    Par faniette dans le forum C++Builder
    Réponses: 13
    Dernier message: 23/12/2010, 12h32
  2. Réponses: 6
    Dernier message: 11/06/2008, 16h35
  3. Réponses: 3
    Dernier message: 18/12/2007, 17h21
  4. Déplacer la sélection d'une ligne dans un stringgrid
    Par jer64 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/03/2003, 00h57

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