|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Цветные строки в ListBox'e
Друзья, можете кидать в меня камнями и кричать "Баян", но поверьте, весь вечер гуглил как прокажённый, и толком не понял как реализовать выделение определённых строк в ListBox'e в зависимости от условий.
Подскажите пожалуйста, каким образом можно сделать следующую конструкцию: Если <условие1> тогда сделать айтем с индексом (например "2") синим цветом; Если <условие2> тогда сделать айтем с индексом "15" красным цветом. Заранее спасибо. P.S. толи уж руки у меня кривые, толи башка к вечеру уже не варит совсем, но не могу въехать, как мне по щелчку той же Button1 раскрашивать заданным макаром строки. В том плане, не доходит какую процедуру вызвать? Помогите пожалуйста, одна надежда на вас... |
#2
|
|||
|
|||
Код:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with (Control as TListBox).Canvas do begin if Index mod 2 = 0 then Brush.Color := clSkyBlue else Brush.Color := clWhite; FillRect(Rect); TextOut(Rect.Left + 2, Rect.Top, (Control as TListBox).Items[Index]) end; end; Предварительно свойство ListBox'а Style устанавливается в значение lbOwnerDrawFixed. И чего "гуглить как прокаженному", если в справке Delphi есть примеры именно по этому вопросу. Не забывайте делать резервные копии |
#3
|
|||
|
|||
Не-не-не, ребят, неправильно я наверное вопрос сформулировал.
Скорее всего правильнее будет так: как выделить цветом Items с порядковыми номерами (Index) равными к примеру: 3,4,5 при каком-то событии, пусть будет при нажатии на кнопку. Вот что именно в обработчике Button1.Click писать, как дать указание листбоксу поменять цвет этих айтемов? |
#4
|
|||
|
|||
Код:
TForm1 = class(TForm) private ChangeColor : Boolean; public end; .... procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with (Control as TListBox).Canvas do begin if not (odSelected in State) then if ChangeColor and (Index in [3..5]) then Brush.Color := clSkyBlue else Brush.Color := clWhite; FillRect(Rect); TextOut(Rect.Left + 2, Rect.Top, (Control as TListBox).Items[Index]) end; end; procedure TForm1.Button1Click(Sender: TObject); begin ChangeColor := not ChangeColor; //каждое нажатие на кнопку включае/выключает подсветку ListBox1.Invalidate; end; Не забывайте делать резервные копии |
#5
|
|||
|
|||
Огромное спасибо, выручил.
|
#6
|
|||
|
|||
Ну и изврат, просто господи А зачем такое, если не секрет?
Кстати, схожий вопрос попутно - как выделять цветом текст (отдельные слова) в Мемо, когда его туда запускаешь из буфера? |