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.