@zeberko - jeśli chcesz kolorować tylko zaznaczony item to zrób jak napisał @olesio - sprawdź czy enum odSelected
znajduje się w parametrze State
;
Jeśli każda linia ma być specjalnie malowana, to skorzystaj z podpowiedzi @_13th_Dragon i informacje o kolorze czy innych stylach tego itema możesz przechować we właściwości Items.Objects
i pobierać je podczas malowania itema, aby stosownie ustalić kolory;
Jeżeli natomiast chcesz usunąć ramkę focusa, wystarczy wykorzystać metodę DrawFocusRect
kanwy ListBox
a;
Przykładowy kod malujący itemy:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with TListBox(Control).Canvas do
begin
if odSelected in State then
begin
// item is selected
Pen.Color := clMenuHighlight;
Brush.Color := clMenuHighlight;
Font.Color := clWhite;
end
else
begin
// item is not selected
Pen.Color := clWhite;
Brush.Color := clWhite;
Font.Color := clBlack;
end;
// background
Rectangle(Rect);
// text
TextOut(Rect.Left + 4, Rect.Top + 3, TListBox(Control).Items[Index]);
// focus frame
if odFocused in State then
begin
Pen.Color := Pen.Color xor $FFFFFF;
DrawFocusRect(Rect);
end;
end;
end;
To kod na wypadek, gdybyś znów chciał wpleść funkcje WinAPI do zdarzenia z VCL; Klasa TCanvas
posiada sporo metod, którymi możesz bez problemu wypełniać dane obszary, wypisywać tekst, malować grafiki i tak dalej.