![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выделить строку в listbox
кроссман © (2010-10-18 19:58:00)Как изменить подсветку ячейки в listbox сразу при добавлении записи в нее при выполнениии определенного условия.
Условие
if (length(edit1.Text)>1) and (ansipos(edit1.Text,stringgrid1.Cells[2,d])>0) then
ind:=1
else
ind:=2;
Изменяю атрибуты
procedure TForm1.ListBox2DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
col: TColor;
brush: TBrush;
begin
brush := TBrush.Create;
with (Control as TListBox).Canvas do
begin
// проверим условие назначим цвет
if ind=1 then
Col:= clyellow
else
Col:= clred;
// покрасим и обновим текст
brush.Style:= bsSolid;
brush.Color:= Col;
Windows.FillRect(handle, Rect, brush.Handle);
Brush.Style:= bsClear;
TextOut(Rect.Left, Rect.Top,
(Control as TListBox).Items[Index]);
end;
brush.Free;
end;
Всегда выдает красный, даже если ind=2. Почему?
кроссман (2010-10-18 21:10:00) [21]И как же исправить?
Германн (2010-10-18 21:02:00) [22]
> Почему?
Потому что контрол перерисовывается гораздо чаще, чем ты думаешь.
кроссман (2010-10-18 20:08:00) [23]Забыл после проверки условия сразу идет
listbox2.Items.Add(stringgrid1.Cells[1,d]);
Может функция изменения атрибутов ячейки не всегда вызывается.