StringGrid - Cellule multi couleur [Résolu]

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

Commenter la réponse de florenth
sp40
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 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.