Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Listview перерисовка d C++ bilder-e / 3 сообщений из 3, страница 1 из 1
08.07.2005, 07:31
    #33155893
Cyrl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Listview перерисовка d C++ bilder-e
Доброе время суток!

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
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;
}


Заранее благодарен за помощь
...
Рейтинг: 0 / 0
08.07.2005, 14:46
    #33157084
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Listview перерисовка d C++ bilder-e
Там просто есть баги в новых версиях Windows, типа XP. Поищи, может найдешь их описания и способы лечения. Например, я замечал,
что в XP иногда не прорисовывается frame, который отмечает выделенный item. Иногда он прорисовывается, но без нижней и правой стороны (такая буква Г). Иногда замечал при изменении размеров последней колонки в сторону уменьшения остается мусор за ней. Ну и все такое прочее.
...
Рейтинг: 0 / 0
09.07.2005, 04:11
    #33157894
Cyrl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Listview перерисовка d C++ bilder-e
Да в том то и дело что в win2k та же ерунда...
И нет ни одного события чтоб отловить изменение ширины колонки!
К тому же он перерисовывает или копирует Rect правой колонки а в левой остаются данные правой!
Может сообщение ловить?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Listview перерисовка d C++ bilder-e / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]