TShape et TStringGrid

Résolu
cs_darkthief Messages postés 23 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 décembre 2007 - 12 juil. 2007 à 17:12
cs_darkthief Messages postés 23 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 décembre 2007 - 14 juil. 2007 à 23:19
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

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
14 juil. 2007 à 10:43
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
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
12 juil. 2007 à 22:00
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
0
cs_darkthief Messages postés 23 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 décembre 2007
14 juil. 2007 à 01:12
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
0
cs_darkthief Messages postés 23 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 décembre 2007
14 juil. 2007 à 23:19
niquel merci pour ton aide ;)
0
Rejoignez-nous