StringGrid - Cellule multi couleur [Résolu]

kizermomo 6 Messages postés vendredi 27 octobre 2006Date d'inscription 26 juillet 2007 Dernière intervention - 20 avril 2007 à 16:22 - Dernière réponse : florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention
- 20 avril 2007 à 17:47
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
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 20 avril 2007 à 17:47
3
Merci
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

Merci florenth 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 84 internautes ce mois-ci

Commenter la réponse de florenth
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 20 avril 2007 à 17:21
0
Merci
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
Commenter la réponse de sp40

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.