StringGrid - Cellule multi couleur [Résolu]

Signaler
Messages postés
6
Date d'inscription
vendredi 27 octobre 2006
Statut
Membre
Dernière intervention
26 juillet 2007
-
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
-
Bonjour à tous, il y a un début à tout alors voici mon premier post, n'ayant trouvé aucune information sur ce sujet.
Voilà mon problème, j'ai une CheckListBox qui contient un item pour chaque jour de la semaine et je cherche a retourner une chaine de caractère de la forme 'DLMMJVS' dans un StringGrid.
Jusque là pas bien compliqué me direz vous. J'aimerais si c'est possible (qu'est ce qui n'est pas possible avec Delphi?!?) que la chaîne affiche la lettre des jours cochés en vert et la lettre de ceux qui ne le sont pas en rouge.
Ex: 'DLMMJVS'.
Si quelqu'un connait une solution merci d'avance

Kizermomo

2 réponses

Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008

En effet, tu vas devoir dessienr chaque caractère un par un.
Voila une procédure similaire à ce que tu veux faire, tu n'as qu'a modifier le code de choix de la couleur par celui qui convient pour ton code.

A mettre dans le OnDrawCell:
<hr size= "2" width="100%" /> procedure TForm1.SGDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
  State: TGridDrawState);
var
  X, Y, I: Integer;
  S: string;
begin
  {>> Initialisation }
  S : = SG.Cells[ACol, ARow];
  Y := Rect.Top + 2;
  X := Rect.Left + 2;
  SG.Canvas.FillRect(Rect);

  {>> Ecriture }
  for I : = 1 to Length(S) do
  begin
    {>> Choix de la couleur: ici les caractères d'indice impair sont rouges,
    les autres sont noirs }
    if Odd(I) then
      SG.Canvas.Font.Color := clRed
    else
      SG.Canvas.Font.Color : = clBlack;

    {>> Dessin du caractère }
    SG.Canvas.TextOut(X, Y, S[I]);

    {>> Décalage du début }
    Inc(X, SG.Canvas.TextWidth(S[I]));
  end;
end;
<hr size="2" width="100%" />
A++
Flo
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Salut,

Je pense qu'il va falloir trouver autre chose... car ça va pas être
simple de gérer des couleurs différentes pour chacun des caractères.

Si tu y tiens vraiment, regardes du côté du  Canvas.Pen.Color,
Canvas.TextOut, et le tout en récupérant les Rect des cellules dans
lesquelles tu veux écrire...

Attention, j'ai remarqué que les écritures ou dessins dans les grilles
sont gourmandes. Sur les machines lentes, ça risque de scintiller...

Simon