Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

Проблемы с выделением колонок listview разным цветом   Найти похожие ветки 

 
dreamse   (2004-10-20 14:48) [0]

Выделяю колонки 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-20 15:20) [1]

Пррисовывается только те колонки которые добавлены. Либо надо разширять колонки чтобы занимали весь ЛистВиев. Либо уменьшить Лист. Или добавить еще одну колонку с большой шириной


 
dreamse   (2004-10-20 15:32) [2]

Это всё понятно , но если я буду обновлять колонку , вносить в неё изменения то listview всё равно будет моргать то же самое что и с refresh


 
-=SS=- ©   (2004-10-20 15:39) [3]

А это пробывал использовать ????
ListView1.Items.BeginUpdate;
 {............}
ListView1.Items.EndUpdate;


 
Мирон ©   (2004-10-20 15:50) [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;


Дальше, надеюсь, сами разберетесь...


 
dreamse   (2004-10-21 08:56) [5]

Решил проблему запуском refresh 1 раз в 15 сек.
Вроде работает , но всё равно мигания заметны. Как прорисовать listview без мигания компонента ?


 
TUser ©   (2004-10-21 10:35) [6]


> Решил проблему запуском refresh 1 раз в 15 сек.
> Вроде работает , но всё равно мигания заметны. Как прорисовать
> listview без мигания компонента ?

Лучше все-таки переписать сам ListView, например смотреть в сторону процедуры TCustomListView.DrawItem


 
-=SS=- ©   (2004-10-21 10:39) [7]

>> Как прорисовать listview без мигания компонента ?
 Если ListView Лежит на форме (не на панели или других компонентах) то это поможет.
В ФормОнПаинт
 ListView1.ControlStyle:=ListView1.ControlStyle+[csOpaque];



Страницы: 1 вся ветка

Текущий архив: 2004.11.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
14-1098179861
Vasya.ru
2004-10-19 13:57
2004.11.07
Численное исследование алгоритмов построения равномерно распредел


1-1098269944
SPeller
2004-10-20 14:59
2004.11.07
Varinat и set - можно подружить?


3-1097057614
VitGun
2004-10-06 14:13
2004.11.07
Ошибка при добавлении записи.


3-1097055881
msguns
2004-10-06 13:44
2004.11.07
ADO+MSAccess+Update


3-1095523928
Zif
2004-09-18 20:12
2004.11.07
Проблема со скролингом в DBLookupListBox.