|
#1
|
|||
|
|||
Ракрасить ListBox
Всем привет!
Необходимо чтобы при сравнении итемсов 2 листбоксов, текст тех итемсов в листбоксе1, стал красного цвета, которых нет в листбоксе2. Код:
for i:=0 to ListBox1.Count - 1 do for j:=0 to ListBox2.Count - 1 do if ListBox1.Items[i]=ListBox2.Items[j] then begin cvt:=i; xcv:=0; break; end else begin cvt:=i; xcv:=1; end; Код процедуры листбокса1: procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var ij,ji:integer; begin with (Control as TListBox).Canvas do Begin if xcv=0 then if index=cvt then font.Color:=clgreen; if xcv=1 then if index=cvt then font.Color:=clred; FillRect(Rect); TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]); end; end; ПОМОГИТе пож.! Мучаюсь скока времени!!! Код, что я привёл один из множества вариантов, которые я испробовал - но выходит не то!((( Последний раз редактировалось Admin, 13.04.2010 в 11:23. |
#2
|
||||
|
||||
Сделайте проще, где-то так:
Код:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin if ListBox2.Items.IndexOf(ListBox1.Items[Index]) = -1 then TListBox(Control).Canvas.Brush.Color := clRed else TListBox(Control).Canvas.Brush.Color := clWhite; TListBox(Control).Canvas.FillRect(Rect); TListBox(Control).Canvas.TextOut(Rect.Left, Rect.Top, ListBox1.Items[Index]); end; procedure TForm1.ListBox2DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin if ListBox1.Items.IndexOf(ListBox2.Items[Index]) = -1 then TListBox(Control).Canvas.Brush.Color := clRed else TListBox(Control).Canvas.Brush.Color := clWhite; TListBox(Control).Canvas.FillRect(Rect); TListBox(Control).Canvas.TextOut(Rect.Left, Rect.Top, ListBox2.Items[Index]); end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Спасибо за ответ, но я не совсем понял. Вы не могли бы пояснить. И ещё я не упомянул, что если осуществлять проверку есть или нет одинаковый итемс в процедуре DrawItem, то тогда при передвижении "скролла" она будет каждый раз выполнять эту проверку и перерисовывать - отсюда страшные тормоза. Поэтому надо как то сделать процедуру проверки при нажатии кнопки, а перерисовка и запоминание цвета в DrawItem. Но почему то это у меня не выходит корректно. За любую помощь буду признателен.))
|
#4
|
|||
|
|||
СПС! ОГРОМНОЕ, кажетса разобрался - у вас хороший код!
|