Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ProgressBar в ListView

16K
01 мая 2010 года
Djony
40 / / 28.04.2007
Уважаемые форумчане, может кто что нить подскажет? идея следующая:
необходимо в компонент listview в строку вставить progressbar, как сие сделать?

Не откажусь от теории но и примерчик хотелось бы видеть)
253
02 мая 2010 года
Proger_XP
1.5K / / 07.08.2004
Думаю, стоит ловить OnDrawItem ListView и отрисовывать его вручную.
16K
02 мая 2010 года
Djony
40 / / 28.04.2007
Ответ интересный а если это все реализуется на Winapi, то как тогда? аналог OnDrawItem в winapi есть?
253
02 мая 2010 года
Proger_XP
1.5K / / 07.08.2004
OnDrawItem это просто обёртка для API в компонентах Delphi и Билдера. Я сам ListView на API не использовал, поэтому конекретно не могу сказать, но тебе надо поставить какой-то флаг и ловить сообщение. Поищи в гугле custom или owner draw, или на MSDN статью глянь.
16K
02 мая 2010 года
Djony
40 / / 28.04.2007
Вроде сделал, даже показывает ProgressBar.
Если кому интересно от код функции вот такой:
Код:
HWND AddProgressBar(int indexString)
{
    HWND PB;
    int pb_Left   = 100;
    int pb_Top    = 100;
    int pb_Width  = 100;
    int pb_Height = 30;
    PB = CreateWindowEx(0, PROGRESS_CLASS, NULL, WS_VISIBLE | WS_CHILD, pb_Left, pb_Top, pb_Width, pb_Height, hl_InfoLoad, NULL, hInst, NULL);
    LONG ColWidth = SendMessage(hl_InfoLoad,LVM_GETCOLUMNWIDTH,0,0)+SendMessage(hl_InfoLoad,LVM_GETCOLUMNWIDTH,1,0)+SendMessage(hl_InfoLoad,LVM_GETCOLUMNWIDTH,2,0);
    pb_Left = -GetScrollPos(g_hWnd, SB_HORZ) + ColWidth;
    pb_Width = SendMessage(hl_InfoLoad,LVM_GETCOLUMNWIDTH,3,0);
    RECT rc;
    rc.left = LVIR_BOUNDS;
    SendMessage(hl_InfoLoad,LVM_GETITEMRECT, indexString,(LPARAM)&rc);
    pb_Top = rc.top;
    pb_Height = rc.bottom - rc.top;
    resizeProgressBar(PB, pb_Left, pb_Top, pb_Width, pb_Height);
    return PB;
}

inline void resizeProgressBar(HWND hProgress, int iLeft, int iTop, int iWidth, int iHeight)
{
    MoveWindow(hProgress, iLeft, iTop, iWidth, iHeight, TRUE);
}


Будут предложения по модернизации готов внимательно выслушать.
253
02 мая 2010 года
Proger_XP
1.5K / / 07.08.2004
14
04 мая 2010 года
Phodopus
3.3K / / 19.06.2008
И при прокрутке ListView все нормально? В смысле при прокрутке и после нее, если поработать с приложением подольше.
16K
10 мая 2010 года
Djony
40 / / 28.04.2007
да вроде все ок, вот только когда добавляется строчка, которая должна быть за пределами видимой области, происходит наползание на ниже след компоненты на пару пикселей, но если потом сделать обновление окна, то все ок... А при движение сколла - все отлично.
16K
24 мая 2010 года
Djony
40 / / 28.04.2007
Появился вопрос по прогрессбару.
Как на прогрессбаре написать количество процентов?
7
24 мая 2010 года
@pixo $oft
3.4K / / 20.09.2006
Рискну предположить,что надо создать там static с текстом.Логично,да?
Также можно попытаться просто установить заголовок окну(сам не пробовал,вам предоставляется шанс всё узнать;))
16K
24 мая 2010 года
Djony
40 / / 28.04.2007
Цитата: @pixo $oft
Рискну предположить,что надо создать там static с текстом.Логично,да?


Да, не спорю, но у меня не получается сделать прозрачным фон статика

Цитата: @pixo $oft
Также можно попытаться просто установить заголовок окну(сам не пробовал,вам предоставляется шанс всё узнать;))

в createwindow при задании текста он не показывается, в момент когда я его (прогрессбар) делаю визибле, и с помощью SetWindowText задаю текст, то все равно не показывается...

У кого еще какие предположения?

И еще вопрос... как выделить всю строку в ListView, если предлагается использовать Full... чего то там - стиль ЛистВью, то тогда пример его использования (у меня создается Item, а потом сабайтемы и они, саб айтемы, заполняются текстом, при выделении первой ящейки остальные не выделяются - какие нить вразумительные предложения могут быть?)

297
24 мая 2010 года
koodeer
1.2K / / 02.05.2009
Цитата: Djony
Да, не спорю, но у меня не получается сделать прозрачным фон статика


Стиль WS_EX_TRANSPARENT устанавливаете?

16K
25 мая 2010 года
Djony
40 / / 28.04.2007
Цитата: koodeer
Стиль WS_EX_TRANSPARENT устанавливаете?



SC = CreateWindowEx(WS_EX_TRANSPARENT,"static","12%",WS_CHILD|WS_VISIBLE,pb_Left, pb_Top, pb_Width, pb_Height, hl_InfoLoad, NULL, hInst, NULL); - не помогло... может я что не так делаю

как вариант, появилась мысль нарисовать в WM_PAINT прогрессбара текст по средствам TextOut, но это же вариант через одно место... неужели в винде не предусмотрен способ написать текст на прогрессбаре?

16K
06 июня 2010 года
Djony
40 / / 28.04.2007
Еще вопрос по прогрессбару:

Нарисовали на форме прогрессбар, если програмно через MoveWindow изменить размеры прогрессбара, то появляется эффект вдавленности, кто знает как от этого избавиться? (от вдавленности я имею ввиду).
14
07 июня 2010 года
Phodopus
3.3K / / 19.06.2008
Эффект "вдавленности" если я правильно понял (логично было подумать о других и выложить хотя бы скрины для примера) это стили. MoveWindow(), насколько известно, стили не меняет - значит проблема кроется в другом месте.
3.8K
26 июня 2010 года
hex
58 / / 31.10.2004
Вот реализация:
http://www.codeproject.com/KB/progress/TheBestProgressBarEver.aspx

если нельзя вставлть ссьілки на другие ресурсі на єтом форуме, прошу простить меня администрацию и не пинать :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог