Texte en couleur et Statusbar

Signaler
Messages postés
25
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
17 janvier 2006
-
Messages postés
25
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
17 janvier 2006
-
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

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
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.
Messages postés
1
Date d'inscription
mercredi 5 mars 2003
Statut
Membre
Dernière intervention
20 mai 2004

TexteOut! C'est sa qui me manquais!
Messages postés
25
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
17 janvier 2006

ok merci bcp :)