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

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


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