Texte en couleur et Statusbar

cs_Eric84 Messages postés 25 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 17 janvier 2006 - 20 mai 2004 à 02:33
cs_Eric84 Messages postés 25 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 17 janvier 2006 - 20 mai 2004 à 21:02
Allo, j'ai remarquer un truc sur Delphi, et je me demandais si c'étais un bug. J'ai mit une statusbar dans lequel jai changer la couleur ds la propriété Font. Toutefois, le texte inscrit dans la status bar reste toujours en noir. Quelqu'un sais comment remedier a ce probleme ?

Merci

3 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 33
20 mai 2004 à 09:18
Effectivement, je n'avais pas remarqué ce phénomène non plus.

Mais comme chaque problème a au moins une solution, voici celle que je propose.

1- Mettre la propriété Style à psOwnerDraw des différents panneaux devant être colorés
2- Ecrire une gestionnaire d'évènements OnDrawPanel pour la composant TStatusbar :
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin
  with StatusBar do
  begin
    if Panel = Panels[0] then
       Canvas.Font.Color := clLime
    else
      Canvas.Font.Color := clRed;
    Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, Panel.Text);
  end;
end;


Dans cet exemple, le premier panel est écrit à l'encre vert clair et les autres en rouge.
De la même façon, il est possible de changer la couleur de fonds de chaque panel en modifiant la propriété Brush du canvas de StatusBar :
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin
  with StatusBar do
  begin
    if Panel = Panels[0] then
       Canvas.Font.Color := clLime
    else
    begin
      //appliquer une couleur de fond
      Canvas.Brush.Color := clBlack;
      //Remplir le fond du panel
      Canvas.FillRect(Rect);
      //changer la couleur d'écriture
      Canvas.Font.Color := clRed;
    end;
    Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, Panel.Text);
  end;
end;

Dans ce deuxième exemple, tous les panels (sauf le premier) seront redessinés avec une encre rouge sur fond noir.

PS : en mettant psOwnerDraw comme style pour les panels, le texte n'est plus visible en mode conception mais reste disponible en mode exécution.
0
cs_Frostdream Messages postés 1 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 20 mai 2004
20 mai 2004 à 21:01
TexteOut! C'est sa qui me manquais!
0
cs_Eric84 Messages postés 25 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 17 janvier 2006
20 mai 2004 à 21:02
ok merci bcp :)
0
Rejoignez-nous