Listview перерисовка

  • Автор темы cmd
  • Дата начала
Статус
Закрыто для дальнейших ответов.
C
#1
Доброе время суток!

Есть необходимость самому рисовать элементы ListView
Всё вроде выводится, но при растягивании колонок не происходит перерисовка?
Не могу найти трабл...
Как заставить ListView перерисовываться при изменении ширины колонок?

Код:
void __fastcall TfrmMain::ListView1DrawItem(TCustomListView *Sender,
  TListItem *Item, TRect &Rect, TOwnerDrawState State)
{
       if(State.Contains(gdSelected))
           ListView1->Canvas->Brush->Color = RGB(255,190,190);
       else
           ListView1->Canvas->Brush->Color = RGB(255,235,235);
       ListView1->Canvas->FillRect(Rect);

   ListView1->Canvas->Pen->Style = psClear;

   Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
   pBitmap->Transparent = true;
   pBitmap->TransparentColor = clWhite;

   ImageList1->GetBitmap(Item->ImageIndex ,pBitmap);

   ListView1->Canvas->Draw(3, Rect.top, pBitmap);

   TRect rect = Rect;
   rect.left = Rect.left + pBitmap->Width + 4;
   rect.right = ListView1->Columns->Items[0]->Width - Rect.left;

   ListView1->Canvas->TextRect(rect, pBitmap->Width + 4, Rect.top, Item->Caption);

   if(Item->SubItems->Count == 0) return;


   if(Item->SubItems->Strings[0] != "")
   {
       rect.left = ListView1->Columns->Items[0]->Width;
       rect.right = ListView1->Columns->Items[0]->Width + ListView1->Columns->Items[1]->Width;
       ListView1->Canvas->TextRect(rect, ListView1->Columns->Items[0]->Width + 4, Rect.top, Item->SubItems->Strings[0]);
   }
   if(Item->SubItems->Strings[1] != "")
   {
       pBitmap->LoadFromResourceName((int) HInstance, "BITMAP_0");
       left = ListView1->Columns->Items[0]->Width + ListView1->Columns->Items[1]->Width + 3;
       for(int i = 0; i < atoi(Item->SubItems->Strings[1].c_str()); i++)
           ListView1->Canvas->Draw(left + (pBitmap->Width * i), Rect.top, pBitmap);
   }
   if(Item->SubItems->Strings[2] != "")
   {
       rect.left = ListView1->Columns->Items[0]->Width + ListView1->Columns->Items[1]->Width + ListView1->Columns->Items[2]-
>Width;
       rect.right = ListView1->Columns->Items[0]->Width + ListView1->Columns->Items[1]->Width + ListView1->Columns->Items[2]-
>Width + ListView1->Columns->Items[3]->Width;
       ListView1->Canvas->TextRect(rect, ListView1->Columns->Items[0]->Width + ListView1->Columns->Items[1]->Width + ListView1-
>Columns->Items[2]->Width + 4, Rect.top, Item->SubItems->Strings[2]);

   }
   delete pBitmap;
}
Заранее благодарен за помощь
 
Статус
Закрыто для дальнейших ответов.