Więc tak. Uporałem się, jak zrobić listBoxa tak, żeby np. po wciśnięciu przycisku kolejny item zyskiwał czerwony kolor, a reszta, żeby była czarna. Nawet uporałem się z tym, jak zrobić, że jeżeli zaznaczony item miał wcześniej kolor czerwony to, gdy jest zaznaczony ma żółty, a gdy miał wcześniej czarny i jest zaznaczony, to ma biały.
(taki wygląd a'la playlisty)
Wszystko pięknie działa, ale tylko wtedy, gdy zaznaczony jest jeden item. Gdy zaznaczam już więcej, wtedy ciekawe rzeczy się robią. Próbowałem to zrobić tak:
zmienna globalna:
var
cl: array of integer;
Procedura OnClick listBoxa:
procedure TForm1.ListBox1Click(Sender: TObject);
var
i: integer;
a: integer;
begin
a:=0;
setLength(cl, listBox1.SelCount);
if listBox1.SelCount=1 then cl[0]:=listBox1.ItemIndex else
begin
for i:=0 to listBox1.Count-1 do
begin
if listBox1.Selected[i] then cl[a]:=i;
a:=a+1;
end;
end;
if listBox1.SelCount=1 then
ListBox1DrawItem(listBox1, cl[0], ListBox1.ItemRect(cl[0]), [])
else
for i:=0 to listBox1.SelCount-1 do
ListBox1DrawItem(listBox1, cl[i], ListBox1.ItemRect(cl[i]), []);
listBox1.Invalidate;
end;
tablica cl ma przechowywać indexy zaznaczonych itemów
teraz procedura DrawItem:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
i: integer;
begin
listBox1.Canvas.Font.Color:=clBlack;
if index=id then listBox1.Canvas.Font.Color:=clRed
else listBox1.Canvas.Font.Color:=clBlack;
if cl<>nil then
begin
if listBox1.SelCount=1 then
begin
if (index=cl[0]) and (index<>id) then listBox1.Canvas.Font.Color:=clWhite;
if (index=cl[0]) and (index=id) then listBox1.Canvas.Font.Color:=clYellow;
end else
begin
for i:=0 to listBox1.SelCount do
begin
if (index=cl[i]) and (index<>id) then listBox1.Canvas.Font.Color:=clWhite;
if (index=cl[i]) and (index=id) then listBox1.Canvas.Font.Color:=clYellow;
end;
end;
end;
listBox1.Canvas.FillRect(rect);
listBox1.Canvas.TextOut(listBox1.ItemRect(index).Left+2, listBox1.itemRect(index).Top, listBox1.Items[index]);
end;
Jeśli coś jest nieczytelne, to mówcie.
Proszę o pomoc.
Jak zrobić, żeby było dobrze przy zaznaczonym więcej niż jednym itemie?