![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
отображение в ListBox-е разноцветных строк [D7, WinXP]
Антоныч © (2005-01-19 15:12:00)Привет всем!
Возник у меня небольшая проблема. Окрашиваю элементы в ListBoxе в разные цвета следующей процедурой:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with (Control as TListBox) do begin
Canvas.FillRect(Rect);
if ItemIndex=0 then Canvas.Font.Color:=clred else
if ItemIndex=1 then Canvas.Font.Color:=clgreen else
Canvas.Font.Color:=clblue;
Canvas.TextOut(Rect.Left,Rect.Top,Items[Index]);
end;
end;
Так вот, элемент окрашивается в свой цвет, только если его выбрать, а первоначально они все отображаются синими. Читал про возникновение события OnDrawItem - дословно: "Возникает, когда программа должна нарисовать очередной элемент". Вроде все верно, а не пашет. Подскажите, пожалуйста, где ошибка.
Плохиш (2005-01-19 16:08:00) [1]ItemIndex - это номер выбранного элемента, а использовать тебе надо Index
Антоныч (2005-01-19 16:08:00) [2]Блин, спасибо большое! Слона-то я и не заметил, как говорится :).
begin...end (2005-01-19 16:07:00) [3]> [3] Антоныч (19.01.05 15:51)
Indexв этом обработчике - это индекс прорисовываемого в данный момент элемента. А вот ItemIndex- это индекс выбранного элемента.
Поэтому осталось внимательно посмотреть на свой код (особенно на первую половину). И сразу станет ясно, где грабли.
Антоныч (2005-01-19 15:51:00) [4]Хотя вообще-то Index в данном случае - это не индекс выбранного, а индекс отображаемого элемента (по документации). Так что где грабли - непонятно.. :)
Антоныч (2005-01-19 15:28:00) [5]В принципе, верно. На этапе создания формы индекс у списка -1. Но тогда подскажите, как сделать, чтоб они сразу разноцветными отображались?
Александр Иванов (2005-01-19 15:18:00) [6]if ItemIndex=0 then Canvas.Font.Color:=clred else
if ItemIndex=1 then Canvas.Font.Color:=clgreen else
Canvas.Font.Color:=clblue;
Отсюда следует, что если Выбран не нулевой и первый, то цвет - clBlue