![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы с выделением колонок listview разным цветом [D6, Win2k]
dreamse © (2004-10-20 14:48:00)Выделяю колонки listview разным цветом : вот код :
procedure TfmMainC.globallistCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
Sender.Canvas.Brush.Color := $009DFFFF;
end;
при этом колонка прорисовываеться не полностью а только часть её.
то есть нужно чтобы компонент listview обновился либо порисовался.
Помогает щелчёк мышью и после выделения строка прорисовываеться.
Как сделать чтобы она сразу прорисовывалась ? Если после кода Sender.Canvas.Brush.Color := $009DFFFF; поставить refresh то компонент жутко моргает :(
-=SS=- (2004-10-21 10:39:00) [1]>> Как прорисовать listview без мигания компонента ?
Если ListView Лежит на форме (не на панели или других компонентах) то это поможет.
В ФормОнПаинт
ListView1.ControlStyle:=ListView1.ControlStyle+[csOpaque];
TUser (2004-10-21 10:35:00) [2]
> Решил проблему запуском refresh 1 раз в 15 сек.
> Вроде работает , но всё равно мигания заметны. Как прорисовать
> listview без мигания компонента ?
Лучше все-таки переписать сам ListView, например смотреть в сторону процедуры TCustomListView.DrawItem
dreamse (2004-10-21 08:56:00) [3]Решил проблему запуском refresh 1 раз в 15 сек.
Вроде работает , но всё равно мигания заметны. Как прорисовать listview без мигания компонента ?
Мирон (2004-10-20 15:50:00) [4]Отрисовываем первый столбец нужным цветом
procedure TForm1.ListView1CustomDraw(Sender: TCustomListView; const ARect: TRect; var DefaultDraw: Boolean);
var
R: Trect;
begin
R := Rect(0, 0, Sender.Column[0].Width, Sender.Height);
Sender.Canvas.Brush.Color := $009DFFFF;
Sender.Canvas.FillRect(R);
end;
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
R: TRect;
begin
if Item.Selected
then Sender.Canvas.Brush.Color := clHighlight
else Sender.Canvas.Brush.Color := $009DFFFF;
R := Item.DisplayRect(drBounds);
R.Right := Sender.Column[0].Width;
Sender.Canvas.FillRect(R);
Sender.Canvas.TextRect(R, R.Left + 2, R.Top, Item.Caption);
DefaultDraw := False;
end;
Дальше, надеюсь, сами разберетесь...
-=SS=- (2004-10-20 15:39:00) [5]А это пробывал использовать ????
ListView1.Items.BeginUpdate;
{............}
ListView1.Items.EndUpdate;
dreamse (2004-10-20 15:32:00) [6]Это всё понятно , но если я буду обновлять колонку , вносить в неё изменения то listview всё равно будет моргать то же самое что и с refresh
-=SS=- (2004-10-20 15:20:00) [7]Пррисовывается только те колонки которые добавлены. Либо надо разширять колонки чтобы занимали весь ЛистВиев. Либо уменьшить Лист. Или добавить еще одну колонку с большой шириной