Salut,
dans mon application j'ai une listbox qui me sert de fichier log et je vaudrait pouvoir changer la couleur de la ligne en fonction de ce qu'il y a dans le log par exemple s'il y a une erreur alors on affiche la ligne en rouge.

J'ai éssayé avec sa : (Ma listBox est en style OwnerDrawFixed)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
procedure TMainForm.ProcessesDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
pCanvas : TCanvas;
begin
pCanvas := TListBox(control).Canvas;
if Couleur = 'blue' then
begin
 pCanvas.Font.Color := clBlue;
end;
if Couleur = 'red' then
begin
 pCanvas.Font.Color := clRed;
end;
if Couleur = 'green' then
begin
 pCanvas.font.Color := clGreen;
end;
if Couleur = 'teal' then
begin
 pCanvas.Font.Color := clTeal;
end;
 
pCanvas.TextOut(Rect.Left,Rect.Top,
                (Processes.Items.Strings[Index]));
 
end;
mais la seule chose que j'arrive à obtenir c'est le changement de couleur de toute ma ListBox
Comme j'ai adapté un code trouvé en C++ je me demande si je n'ai pas fait une erreur quelque part. Je n'ai pas réussi à traduire le bout de code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
   if(State.Contains(odSelected))  //ligne selectionnée
Le code que j'avais trouvé était :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State)
{
      TCanvas *pCanvas = ((TListBox *)Control)->Canvas;
 
      if ((Index%2)==0) pCanvas->Brush->Color = clYellow;
      // met 1 ligne sur 2 jaune
 
      if(State.Contains(odSelected))  //ligne selectionnée
                       {
                        pCanvas->Brush->Color = clRed;
                        pCanvas->FillRect(Rect);
                        pCanvas->Font->Color = clYellow;
                       }
      else pCanvas->FillRect(Rect);  //Les autres lignes
 
      //Il faut réécrire les Items.
      pCanvas->TextOut(Rect.Left+5,Rect.Top+2,
                ((TListBox *)Control)->Items->Strings[Index]);
}
merci d'avance