TShape et TStringGrid [Résolu]

Signaler
Messages postés
23
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
6 décembre 2007
-
Messages postés
23
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
6 décembre 2007
-
Bonjour à tous,
j'ai un petit soucis que je n'arrive pas à résoudre.

Voila, j'utilise un StringGrid et je voudrais afficher un objet de type TShape dans une des cellules.
Mais la je bloque je n'y arrive pas.
Quelqu'un aurait-il une solution ou un début de solution? :p

afficher une image, c'est pas dur alors je pense que c'est pas plus compliqué pour un TShape mais bon..

Merci d'avance.

4 réponses

Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Tout simplement :

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  with TStringGrid(Sender).Canvas do
  begin
    // Action sur la colonne n°3
    if ( Acol=3) then
    begin
      // Dessin d'une ellipse sur la zone
      Brush.color := clWhite;
      Ellipse(Rect);

      // Dessin d'un cercle en haut à droite de la zone
      Brush.color := clRed;
      Ellipse(Rect.Left,Rect.Top,Rect.Left+20,Rect.Top+20);

    end ;
  end;
end;

Cordialement. <hr />"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonsoir,

Bien que je doute grandement de l'interêt d'une telle démarche (Il serait BEAUCOUP plus logique de dessiner directement dans la cellule), mais en réponse à ta question, tu peux le faire de cette façon :

// Je suppose que tu as une forme Shape1 et un StringGrid1 sur ta fiche Form1
// Tout se passe dans l'évenement OnDrawCell

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if ( Acol=2) and (Arow=2) then // Choix d'une ligne et d'une colonne
  begin
    // On indique que le parent est le stringgrid1, cela aurait pu etre fait
    // une seule fois dans le create de la fiche
    Shape1.Parent:=StringGrid1;     

    // On redimensionne le TShape à la taille de la cellule
    with Rect do
      Shape1.SetBounds(Left,Top,Right-Left,Bottom-Top);
  end;
end;

N.B. L'inconvénient d'une telle démarche est qu'il faudra autant de TShape que de cellules

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
23
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
6 décembre 2007

Bonsoir,
j'ai essayé ta technique, et visiblement j'ai un soucis vu que je n'y arrive pas
Par contre le fait de dessiner directement dans la cellule peut peut être être effectivement mieux.
si on peut dessiner un cercle d'une certaine couleur, je suis preneur..
si tu peux me mettre sur la voie, je te remercie
Messages postés
23
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
6 décembre 2007

niquel merci pour ton aide ;)