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

Composants VCL Delphi Discussion :

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


Sujet :

Composants VCL Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Comment insérer une image dans une cellule d'un TDrawGrid ?
    Bonjour,
    Je suis en galère depuis plusieurs heures sur un petit problème qui doit avoir une solution simple - mais introuvable via google :o
    J'essaye de faire afficher une image dans un drawgrid, sur la case qu'on a cliquer. Je parviens facilement à mettre un texte dans une StringGrid, mais l'image dans le drawgrid je n'y arrive pas !
    Tout ce que j'ai essayé me provoque des erreurs !

    Donc si quelqu'un pouvait m'indiquer la marche à suivre, ce serait très sympas

    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Double-cliquer sur l'évènement OnDrawCell de l'objet...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Procedure TForm1.DrawGrid1DrawCell(Sender: TObject;
      ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    Begin
      If (Acol = DrawGrid1.Col) And (ARow = DrawGrid1.Row) Then
        DrawGrid1.Canvas.Draw(Rect.Left, Rect.Top, Image1.Picture.Graphic);
    End;
    Voir la propriété Options de la grille, en particulier GoRangeSelect et goThumbTracking...
    Voir aussi la propriété DoubleBuffered de la grille pour accélérer le rendu.


  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci à toi pour ta réponse.

    Avec ton code je peux afficher une image, mais dès que je clique autre part, l'image disparait.

    Ce que je voudrais, c'est par exemple afficher au démarrage des images, avec une StringGrid je faisais une boucle simple genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for j := 0 to longueur - 1 do
      begin
        SgCarte.Cells[largeur - 1, j] := 'Mur';
        OccupCase[0, j] := 2;
      end;
    Le problème c'est que je peux pas "bêtement" remplacé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SgCarte.Cells[largeur - 1, j] := 'Mur';
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DgCarte.Canvas.Draw(Rect.Left, Rect.Top, ImMur.Picture.Graphic);
    (si on considère que j'ai bien remplacé le StringGrid par la DrawGrid)
    Parce que je vois pas à quoi correspond le Rect.

    En résumé, je voudrais afficher des images au fur et à mesure, là ou la personne clique, de façon à construire une "map". Donc il faut que les images mises restent. Mais je n'y parviens pas.

    Les mises à jours je penses qu'il faut les faire lors d'un OnSelectCell (qui prends en paramètres : Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean

    Pour l'affichage de départ ca doit bien être le OnDrawCell, mais comment magouiller ?

    Merci d'avance.

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Il faut que tu mémorises dans un tableau, l'index de l'image pour chaque cellule.

    http://sub0.developpez.com/delphi/demogridbmp.zip

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je vais regarder la source et je penses que ca va marcher.

    Merci à toi

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

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, 12h51
  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, 15h55
  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, 16h35
  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, 15h39
  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, 13h03

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