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

Вниз

TListView, OwnerDraw, артефакты при ресайзе колонок   Найти похожие ветки 

 
RWolf ©   (2007-07-08 03:33) [0]

скорее всего баян, но вот не соображу, в чем дело, и поиск в сети результатов не дает.
собсно, рисую сабж стиля vsReport из 2 колонок, обрабатывая OnDrawItem таким вот образом:

var
 bounds,r:TRect;
 fg,bg:TColor;

...

 bounds:=item.DisplayRect(drBounds);

 with sender.Canvas do begin
   //закрашиваем строку
   brush.Color:=bg;
   FillRect(bounds);

   //рисуем 1-ю колонку
   font.Color:=fg;
   r:=bounds;
   r.Right:=r.Left+lv.Columns[0].Width;
   TextRect(bounds,r.Left+2,r.Top,Item.Caption);

   //рисуем 2-ю колонку
   font.Color:=fg;
   r.Left:=r.Left+lv.Columns[0].Width;
   r.Right:=bounds.Right;
   TextRect(bounds,r.Left+2,r.Top,Item.SubItems[0]);

   if odFocused in state then DrawFocusRect(bounds);
 end;


меняю ширину 1-й колонки и получаю на экране две копии 2-й колонки на старом и на новом местах.
Что поменять в коде для корректной отрисовки?


 
RWolf ©   (2007-07-08 03:38) [1]

прошу прощения, ошибся немного. Привожу полный текст обраотчика:


procedure TForm1.lvDrawItem(Sender: TCustomListView;
 Item: TListItem; Rect: TRect; State: TOwnerDrawState);
var
 bounds,r:TRect;
 fg,bg:TColor;
begin
 bg:=clWindow;
 fg:=clWindowText;
 if odSelected in state then begin
   bg:=clHighlight;
   fg:=clHighlightText;
 end;

 bounds:=Item.DisplayRect(drBounds);

 with sender.Canvas do begin
   //закрашиваем строку
   brush.Color:=bg;
   FillRect(bounds);

   //рисуем 1-ю колонку
   font.Color:=fg;
   r:=bounds;
   r.Right:=r.Left+lv.Columns[0].Width;
   TextRect(r, r.Left+2, r.Top, Item.Caption);

   //рисуем 2-ю колонку
   font.Color:=fg;
   r.Left :=r.Left+lv.Columns[0].Width;
   r.Right:=bounds.Right;
   TextRect(r, r.Left+2, r.Top, Item.SubItems[0]);

   if odFocused in state then DrawFocusRect(bounds);
 end;
end;


 
Германн ©   (2007-07-08 03:56) [2]


>
> меняю ширину 1-й колонки и получаю на экране две копии 2-
> й колонки на старом и на новом местах.
> Что поменять в коде для корректной отрисовки?
>

Событие OnDrawItem!
Отрисовывай в нём только то, что ему принадлежит. И никаких колонок!


 
RWolf ©   (2007-07-08 14:29) [3]

Отказался от собственной прорисовки; мне, в принципе, нужна только подсветка колонок. Наблюдаю очередные грабли.
ListView, три колонки, стиль vsReport, OwnerDraw=False.

procedure TfrmMain.lvCustomDrawItem(Sender: TCustomListView;
 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
 lv.Canvas.Font.Color := clWindowText;
end;

procedure TfrmMain.lvCustomDrawSubItem(Sender: TCustomListView;
 Item: TListItem; SubItem: Integer; State: TCustomDrawState;
 var DefaultDraw: Boolean);
begin
 case SubItem of
 0:   Exit;                                 //первая колонка уже обработана
 1:   lv.Canvas.Font.Color := clGrayText;   //закрасить среднюю колонку серым
 else lv.Canvas.Font.Color := clWindowText; //остальные - черным
 end;
end;


Две последние колонки закрашиваются серым цветом. Глюк VCL?


 
{RASkov} ©   (2007-07-08 19:30) [4]

> [3] RWolf ©   (08.07.07 14:29)
> Две последние колонки закрашиваются серым цветом. Глюк VCL?

Canvas она одна для всего компонента и соответственно перья и кисти тоже....
Отсюда - возможно ты орисовал рект с переопределенными цветами пера и кисти и не вернул назад, последующая отрисовка канвы идет с последними определенными цветами...
А вообще не понятно

> lv.Canvas.Font.Color := clGrayText;

и

> колонки закрашиваются серым цветом

Что серым становиться - фон? или цвет шрифта?


 
RWolf ©   (2007-07-08 20:11) [5]


> Что серым становиться - фон? или цвет шрифта?

шрифт в обеих колонках отрисовывается серым цветом.



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

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

Наверх




Память: 0.48 MB
Время: 0.023 c
15-1184145951
zdm77
2007-07-11 13:25
2007.08.05
Прокси


2-1184059419
Жидкое стекло
2007-07-10 13:23
2007.08.05
Как переименовать файл (папку) с поддержкой Unicode?


3-1177429285
Antaan
2007-04-24 19:41
2007.08.05
Кто знается на SQL подскажите


3-1177407202
Павел Калугин
2007-04-24 13:33
2007.08.05
Посоветуйте как лучше организовать календарь


15-1183714852
Panel
2007-07-06 13:40
2007.08.05
Ошибка при компиляции модуля