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 :

colorier un stringgrid dynamique


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut colorier un stringgrid dynamique
    bonjour a tous ,


    Ben voila le sujet est posé dans l'intitulé.

    je ne sais pas comment colorier un stringgrid créé dynamiquement


    j'aimerais en fait colorier une ligne sur deux .

    j'arrive a colorier le font , le texte mais je n'arrive pas a faire passer des parametres pour colorier le font avec une alternance de couleur en fonction des lignes...


    merci pour les réponses qui seront apportées

    © Seb ®

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Comme souvent, la réponse est dans la http://delphi.developpez.com/faq/?page=stringgrid
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    merci pour la réponse bateau mais si j'ai pris la peine de poster un sujet c'est que je suis aller voir la FAQ avant !



    la question est de colorier une string gride qui est créée DYNAMIQUEMENT


    j'arrive a lui donné une couleur général mais pas lui donner deux couleurs en alternance sur chaques lignes..


    Merci d'avance si vous pouvais répondre a ce probleme ou bien m'indiquer comment adapter le code de la FAQ pour une stringgrid dynamique .

    © Seb ®

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 747
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 314
    Points
    13 314
    Par défaut
    Et où est le problème ?!?
    Il te suffit d'assigner DYNAMIQUEMENT l'événement OnDrawCell de ton Grid .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyStringGrid.OnDrawCell := MyDrawEvent;

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    Là je doit reconnaitre que la réponse est vraiment précise!

    Merci c'étais juste cela qui me manquais . je n'arrivais pas a passer le parametre
    drawcell dynamiquement !


    Le code de la FAQ marche très bien a présent !


    Donc vue que je travail sur une stringrid dynamique pourrais tu me donner un lien ou comment assigner les différentes options et évenement dynamiquement sur ma stringgrid


    Merci
    © Seb ®

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 747
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 314
    Points
    13 314
    Par défaut
    Dis-nous plutôt ce dont tu as besoin

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    Ben j'aurais besoin de mettre en place les différentes options possibles dans ma stringgrid dynamique.

    Je m'explique un peu.. Il faudrait que je puisse faire des sélections étendu sur plusieurs cellules. et pouvoir agrandir ou réduire la largeur de mes cellule comme il me semble je ne sais pas sur quel parametres on agit pour faire ceci .. :-S


    et juste une petite info aussi si jamais ca traine dans un coin de vos tetes .. savoir si y'a moyen de récupérer les éléments inscrits dans un sélection de cellule...imaginons que je veuille faire un calcul sur une zone de ma stringgrid...ce dont j'aurais besoin dans la continuité de mon programme ...



    merci d'avance pour ces quelques petites précisions qui sont peut être pas grand choses pour certain mais beaucoup pour ma part!

    © Seb ®

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 747
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 314
    Points
    13 314
    Par défaut
    La grille est en RangeSelect par défaut. Pour récupérer les cellules sélectionnées, il faut faire deux boucles imbriquées sur Selection.

    Pour la largeur des colonnes, ColWidths.

    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
    procedure TForm1.FormCreate(Sender: TObject);
    var
      i :integer;
    begin
      //Taille des colonnes en multiple de 10
      for i := 0 to StringGrid1.ColCount -1 do
        StringGrid1.ColWidths[i] := 10 *(i+1);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      x, y: integer;
    begin
      //Inscrit les N° de ligne et colonne dans les cellules sélectionnées
      with StringGrid1, Selection do
      begin
        for y := Top to Bottom do
          for x := Left to Right do
            Cells[x,y] := Format('%d/%d', [x,y]);
      end;
    end;

  9. #9
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    yes merci ca marche plutot pas mal je l'ai un peu adapter ! j'ai reussi a faire des copier coller aussi sur la Stringgrid que je crée dynamiquement mais la aussi il se passe un truc bizzar..


    Le copier coller marche que sur la derniere stringgrid que j'ai créé. Je tiens a dire que chaques stringgrid est créée dans une pagecontrol ou j'ajoute des pages de maniere dynamique ! ca marche un peu comme un Excel en clair ... enfin c'est ce que je souhaite a la fin de mon programme.

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 747
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 314
    Points
    13 314
    Par défaut
    Tu auras aussi compris qu'on ne va pas faire ton programme à ta place .
    Si tu as un problème précis, on fera notre possible pour te donner un coup de main.

    Dans le cas présent, il faut que tu t'arranges pour récupérer le Grid de l'onglet actif. S'il n'y a qu'un composant par page (ta grille):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveGrid := TStringGrid(PageControl1.ActivePage.Controls[0]);

  11. #11
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    merci pour la précision! je ne tiens a pas ce que tu m'écrive mon programme. même si je donne l'impression de demander pas mal de choses pour mon programme je fait pas mal de choses a coté.


    La je parle que des choses que je n'arrive pas a trouver spécialement dans les FAQ.

    Je vous ferais par de mes problemes précisement y'a aucuns probleme! MERCI en tout cas pour vos compétences!


    © Seb ®

  12. #12
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    re tout le monde !


    Juste pour poser un petit soucis j'me suis un peu enflammé sur mes lignes de codes et j'ai ma couleur qui fait des siennes...


    J'explique : je créé ma stringgrid dynamiquement au formshow puis je recréé une nouvelle stringgrid avec un bouton qui se créée dans un autre page control.

    Mais dès que je dépasse le nombre de 1 string grid la couleur disparait faisant place au blanc...dès que je reviens au nombre de 1 stringgrid la couleur refait surface comme par magie....bien que parfois la programmation releve un peu de la magie jusqu'a ce qu'on comprenne le probleme j'aimerais que la magie cesse afin d'avoir ma couleur partout..

    J'ai essayer de chercher si javais pas un probleme de parents pour la string grid... a chaque stringgrid je défini un nouveau parent qui est la nouvelle tabsheet créée ou alors la procedure de couleur n'arrive pas a savoir quel string grid elle doit colorier ...alors que j'affecte cette procédure de coloriage sur le "pagechanging" de mon tabsheet mais ca ne change rien...


    si jamais quelqu'un a une idée sur le probleme ...je maitrise pas encore bien bien le dynamique ..

  13. #13
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par sebyo Voir le message
    J'ai essayer de chercher si javais pas un probleme de parents pour la string grid... a chaque stringgrid je défini un nouveau parent qui est la nouvelle tabsheet créée
    Le parent du StringGrid n'a pas grand chose à voir lors du dessin via OnDrawCell.

    Citation Envoyé par sebyo Voir le message
    ou alors la procedure de couleur n'arrive pas a savoir quel string grid elle doit colorier ...
    Tu sais quel StringGrid est traité via le paramètre Sender de OnDrawCell.

    On peut voir ta procédure OnDrawCell pour voir ce qui cloche ?

  14. #14
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    voici ma procédure de coloriage


    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
    procedure Ttableur.MydrawEvent(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      With Activegrid Do With Canvas Do             //Sender As TActivegrid
         //Classeur1.ActivePage
      Begin
        If gdFixed in State
          Then Brush.Color := clBtnFace
          Else If gdSelected In State
            Then Brush.Color := clNavy
            Else If Odd(ARow)
     
               Then Brush.Color := $FFE0FF
              Else Brush.Color := $FFFFE0;
              //Brush.Color := $FF3300;
        FillRect(Rect);
        If gdSelected In State
          Then Font.Color:=clwhite
          Else Font.Color:=clBlack;
       // TextOut(Rect.Left,Rect.Top,Cells[ACol,ARow]);
         DrawText(Canvas.Handle, PChar(Cells[ACol,ARow]), -1, Rect ,
                  DT_CENTER or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE  );
      End;
    end;


    je l'appel via Activegrid.OnDrawCell := MyDrawEvent;



    voilou pour ce qui cloche je n'ai tjsp as trouver je cherche , si jamais je trouve avant vous je poste ma solution !!!


    © Seb ®

  15. #15
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Rien de particulier dans ton code, à part Activegrid qui peut ne pas pointer vers le StringGrid attendu.

    Modifié ainsi qu'est-ce que ça donne ?
    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
    procedure TTableur.MyDrawEvent(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      with TStringGrid(Sender), Canvas do
      begin
        if gdFixed in State then
          Brush.Color := clBtnFace
        else if gdSelected in State then
          Brush.Color := clNavy
        else if Odd(ARow) then
          Brush.Color := $FFE0FF
        else
          Brush.Color := $FFFFE0;
        FillRect(Rect);
     
        if gdSelected in State then
          Font.Color := clwhite
        else
          Font.Color:=clBlack;
     
        DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), -1, Rect ,
          DT_CENTER or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE);
      end;
    end;

  16. #16
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    rahhh la je doit avoué que pour moi ces deux petits mots "Tstringgrid" et "sender" deviennent magiques!!



    Ca marche a la perfection ! c'est bien le probleme que j'avais ...dès que je fait un changement de tabsheet la couleur procédure ne savais plus ou donner tete...


    encore merci !!! je vais cloturer ce sujet car la je croi qu'on a fait le tour du sujet pour colorier un stringgrid dynamique!

    © Seb ®

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

Discussions similaires

  1. Colorier colonnes StringGrid au lancement
    Par PhilLU dans le forum Débuter
    Réponses: 1
    Dernier message: 19/03/2012, 09h23
  2. Rendre un stringgrid dynamique dans son classement.
    Par Yepazix dans le forum Débuter
    Réponses: 3
    Dernier message: 12/04/2010, 19h31
  3. pointer sur une stringgrid dynamique
    Par sebyo dans le forum Débuter
    Réponses: 1
    Dernier message: 27/05/2009, 10h23
  4. Colorier une StringGrid
    Par flo291288 dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/04/2009, 10h24
  5. Créer un StringGrid dynamiquement
    Par Homer dans le forum Langage
    Réponses: 3
    Dernier message: 29/03/2006, 07h59

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