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)
mais la seule chose que j'arrive à obtenir c'est le changement de couleur de toute ma ListBox
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;
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
Le code que j'avais trouvé était :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if(State.Contains(odSelected)) //ligne selectionnée
merci d'avance
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]); }
Partager