Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > ClipRect в ListView


Автор: Illusion Dolphin 7.11.2005, 12:40
Создаю ListView с нестандартной прорисовкой, но наткнулся на очень нехорошую для меня вещь: в ListView1AdvancedCustomDrawSubItem если Item является только что выделенным Canvas.ClipRect содержит область, не дающую в полной мере отрисовать всю облась правильно. Очень хочется "очистить" Canvas.ClipRect чтобы то что я выводил не обрезалось данной областью! Выручайте, уде второй день бъсь smile

Вот часть прорисовки где глюк выползает:

Код

procedure TForm1.ListView1AdvancedCustomDrawSubItem(
  Sender: TCustomListView; Item: TListItem; SubItem: Integer;
  State: TCustomDrawState; Stage: TCustomDrawStage;
  var DefaultDraw: Boolean);
...
var
...
begin

 if SubItem=1 then
 begin
  r2 := Item.DisplayRect(drLabel);
  Sender.Canvas.Brush.Style:=bsSolid;
  if Item.Selected then
  begin
   Sender.Canvas.Brush.Color:=$AAAAFF;
   Sender.Canvas.Pen.Color:=$AAAAFF;
   ListView1.Canvas.Rectangle(0,r2.Top,Sender.Width,r2.Bottom); //тут рисуется не та область, которую я указываю а лишь маленькая часть! ClipRect содержит ту область которая обрезается, нужно всего лишь залить область (0,r2.Top,Sender.Width,r2.Bottom)!!!
  end else
  begin
   ...
  end;
...


P.S. нужно именно так сделать для ускорения прорисовки, можно и принудительно вызвать после выделения итема Repaint, по в этом случае скорость отрисовки падает (а она и так у меня не очень высокая т.к. выводится куча различных данных).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)