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 :

Comment insérer une image dans une cellule d'un TStringGrid ?


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut Comment insérer une image dans une cellule d'un TStringGrid ?
    Bonjour,

    et bien tout est dans le titre ...

    j'ai un composant TStringGrid sur ma Form que je souhaiterai utiliser comme une sorte de journal d'alertes et insérer à l'intérieur d'une cellule une image de type ".ico".

    Comment puis je faire ???


  2. #2
    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 petitclem
    Voici un bout de code qui affiche une image BMP contenue dans un TImage dans chaque cellule d'un STringGrid, a toi de le modifier a ta convenance
    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
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
          int ARow, TRect &Rect, TGridDrawState State)
    {
    int i, j, X, Y;
    TRect R;
    if(State.Contains(gdFixed))
    {
    // Les cellules fixes sont toujours dessinées en gris
    StringGrid1->Canvas->Brush->Color = clBtnFace;
    StringGrid1->Canvas->Brush->Style = bsSolid;
    StringGrid1->Canvas->FillRect(Rect);
    }
    else if(State.Contains(gdSelected))
    {
    // Les cellules sélectionnées sont en bleue
    StringGrid1->Canvas->Brush->Color = clNavy;
    StringGrid1->Canvas->Brush->Style = bsSolid;
    StringGrid1->Canvas->FillRect(Rect);
    }
    else
    {
    // Recherche de la zone image à copier pour tenir compte des décalages
    // de la grille en fonction des barres de défilement.
    X = 0;
    for(i = StringGrid1->FixedCols + 1; i <= ACol; i++) (X++, StringGrid1->ColWidths [i]);
    {
    Y = 0;
    for(i = StringGrid1->FixedRows + 1; i <= ARow; i++) (Y++, StringGrid1->RowHeights[i]);
    {
    R.Left = X;
    R.Right = X + Rect.Right - Rect.Left;
    R.Top = Y;
    R.Bottom = Y + Rect.Bottom - Rect.Top;
    // Dessin d'une partie de l'image
    Image1->Visible = false;
    // D:\\Copie_USB\\Sauvegarde mes documents C\\Mes images\\Massiv10\\Massiv10\\Bitmaps\\Arrow
    Image1->Picture->Bitmap->LoadFromFile("D:\\Copie_USB\\Sauvegarde mes documents C\\Mes images\\Massiv10\\Massiv10\\Bitmaps\\Arrow\\arcarrow1.bmp");
    // "C:\\Documents and Settings\\blondelle\\Mes documents\\Mes images\\Massiv10\\Massiv10\\Bitmaps\\Arrow\\arcarrow1.bmp"
    StringGrid1->Canvas->CopyRect(Rect, Image1->Picture->Bitmap->Canvas, R);
    StringGrid1->Canvas->Brush->Style = bsClear;
    }
    }
    }
    // Sélection de la couleur de texte
    if(State.Contains(gdSelected))
    {
    SetTextColor(StringGrid1->Canvas->Handle, clWhite);
    }
    else
    {
    SetTextColor(StringGrid1->Canvas->Handle, clBlack);
    }
    // Dessin du texte en utilisant la fonction API
    DrawText(StringGrid1->Canvas->Handle, (StringGrid1->Cells[ACol][ARow]).c_str(), -1, &Rect, DT_NOPREFIX );
    }
    //---------------------------------------------------------------------------

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Merci pour ton aide blondelle !

    Ton code fonctionne bien, il remplit mon StringGrid avec l'image mais je n'arrive pas à le modifier pour que ça me mette l'image à l'endroit que je veux (ex: case [1][1]) !!!

    Pourrais tu m'expliquer ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    C'est bon, j'ai réussi !!!

    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
     
    void __fastcall TFormJournal::StringGridAlertesDrawCell(TObject *Sender,
    	  int ACol, int ARow, TRect &Rect, TGridDrawState State)
    {
     
     
    	AnsiString RepertoireApplication = ExtractFilePath(Application->ExeName);
    	AnsiString IconeValider = RepertoireApplication + "IconeValider.bmp";
     
    	TImage *Valider = new TImage(0);
     
    	Valider->Picture->Bitmap->LoadFromFile(IconeValider);
    	StringGridAlertes->Canvas->CopyRect(Rect, Valider->Picture->Bitmap->Canvas, Rect);
     
     
     
     
     
    }
    Par contre comment centrer l'image ?

  5. #5
    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
    Tu te sert des valeurs de Rect et de ton Image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    pour recuperer les valeurs
    xx = Rect.Left;
    xx = Rect.Right;
    xx = Rect.Top;
    xx = Rect.Bottom;
     
    pour ecrire les valeurs
    Rect.Left = ...;
    Rect.Right = ...;
    Rect.Top = ...;
    Rect.Bottom = ...;

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    OK, merci blondelle.

    Je viens de me rendre compte qu'avec le code que j'ai fait, l'image s'affiche toujours sur la case en haut à gauche !!!

    Comment puis je définir la case où je veux mettre cette image ???


Discussions similaires

  1. [Débutant] Manipulation d'images : intégrer une image dans une image
    Par noscollections dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/10/2014, 11h51
  2. Comment insérer un JPG dans une image indépendante
    Par Claude_paul_louis dans le forum IHM
    Réponses: 1
    Dernier message: 21/02/2012, 14h55
  3. Comment insérer des images dans une ComboBox HTML ?
    Par UiYuki dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 29/08/2010, 15h35
  4. [MySQL] Comment insérer 6 lignes en une fois dans une base mysql avec du PHP ?
    Par Alexandrebox dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/02/2008, 14h39
  5. Comment insérer les valeurs d'une requete dans une variable tableau
    Par uptoditime dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/12/2007, 12h03

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