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 29 30 31 32 33 34 35 36 37 38 39 40 41
|
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
const
POSITION = 50; // La "marge" est à 50 % du contrôle
var
p: integer;
gauche, droite: string;
largeur: Integer;
rg, rd: TRect;
begin
with Control as TListBox do
begin
p:= Pos('|', Items[Index]);
if p = 0 then
begin
{ Si le caractère | n'est pas présent, on trace normalement }
Canvas.FillRect(Rect); // Efface le rectangle
Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]); // Imprime le texte
end
else
begin
largeur:= Rect.Right - Rect.Left; // Largeur du contrôle en pixels
{ On travaille sur la partie gauche }
gauche:= Copy(Items[Index], 1, p - 1); // Récupère la partie gauche du texte
rg:= Classes.Rect(Rect.Left, Rect.Top,
Rect.Left + largeur * POSITION div 100, Rect.Bottom);
Canvas.FillRect(rg);
Canvas.TextOut(rg.Left, rg.Top, gauche);
{ Même chose pour la partie droite }
droite:= Copy(Items[Index], p + 1, Length(Items[Index]) - p);
rd:= Classes.Rect(Rect.Left + largeur * POSITION div 100, Rect.Top,
Rect.Right, Rect.Bottom);
Canvas.FillRect(rd);
Canvas.TextOut(rd.Left + 1, rd.Top, droite);
end;
end;
end; |
Partager