|
ListView, Report - 1 колонка. Исключить горизонтальную прокрутку.
|
|||
---|---|---|---|
#18+
Есть ListView - Report - единственный Column Я хочу, чтоб этот Column вписывался в ширину ListView (максимально красиво). При этом чтоб не было нижней полосы прокрутки. Как зафиксировать ширину столбца через хитрый сабклассинг я знаю - чтоб юзер кривыми ручонками не тянул за header. Вопрос как правильно установить ширину столбца, чтоб на весь ListView и без прокрутки? Операционки разные XP, Vista, 7, 8 -метод подводить не должен - чтоб случайно Hscroll не всплывал и т.п. Использовать всякие LVS_NOSCROLL не хочу, чревато это всякими спецпроблемами, которые решать неохота. Далее, если элементов стало больше, то появляется V_SCROLL, его не отменяем. Как рассчитать ширину столбца в этом случае? И далее, как понять есль ли V_SCROLL или нет? Как отследить момент появления/исчезновения V_SCROLL чтоб перещелкнуть ширину в соответствии с написанным? Задал голый вопрос, потому как м.б. кто-то сталкивался, а эксперементировать долго неохота. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 15:52 |
|
ListView, Report - 1 колонка. Исключить горизонтальную прокрутку.
|
|||
---|---|---|---|
#18+
Дмитрий77Далее, если элементов стало больше, то появляется V_SCROLL, его не отменяем. Как рассчитать ширину столбца в этом случае? Ширину скролла можно узнать с помощью функции GetSystemMetrics. Дмитрий77И далее, как понять есль ли V_SCROLL или нет?Скорее всего у окна появляется какой-то стиль. Проверить не могу, нет spy++ Дмитрий77Как отследить момент появления/исчезновения V_SCROLLПросабклассить и в режиме брейка отловить сообщение, после которого появляется скролл. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 16:25 |
|
ListView, Report - 1 колонка. Исключить горизонтальную прокрутку.
|
|||
---|---|---|---|
#18+
Подразобрался, вот результаты (готовый тест-проект с прозрачным ListView во вложении). Тупо убрать HSCROLL (с гарантией, что его не будет даже если столбец уедет) не получается. LVS_NOSCROLL убирает оба скролла (включая вертикальный). Причем убирает так, что по вертикали даже с клавиатуры стрелкой вниз не прокрутишь - не вариант. Есть еще набор ф-ций типа ShowScrollBar и EnableScrollBar, но рабочая область ListView при этом не перерисовывается (пусто там вместо строчки), а во вторых при перерисовке и т.п. скролбар опять выплывает. Посему мой вариант жесткой установки ширины столбца думаю верный. AntonariyДмитрий77И далее, как понять есль ли V_SCROLL или нет?Скорее всего у окна появляется какой-то стиль. Да, правы. Стиль WS_VSCROLL. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
AntonariyДмитрий77Далее, если элементов стало больше, то появляется V_SCROLL, его не отменяем. Как рассчитать ширину столбца в этом случае? Ширину скролла можно узнать с помощью функции GetSystemMetrics. Ну да, так и есть: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Здесь четверка подбирается опытным путем. Зависит от границы. В моем случае: Код: vbnet 1.
При другой границе подойдет напр. цифра 2(px). Надо быть аккуратным. Но я проверил - результат стабилен (одинаковый код с одинаковой дельтой) для Классики, XP и вистообразных. Дальше встает вопрос, в какой момент устанавливать ширину. Самое простое,тупо всякий раз как меняется к-во итемов. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Но тут осечка. Когда число итемов превышает критическую высоту, то WS_VSCROLL устанавливается с задержкой, т.е. ListView_IsVScrollBarVisible в CommandAdd_Click один раз сработает неправильно (именно там где событие появления VSCROLL и происходит) Плюс захотелось красивого варианта: AntonariyДмитрий77Как отследить момент появления/исчезновения V_SCROLLПросабклассить и в режиме брейка отловить сообщение, после которого появляется скролл. Событие WM_STYLECHANGED Код: vbnet 1. 2.
Но опять проблема - не всегда оно генерируется. При появлении VSCROLL -да, при удалении -нет. Т.е. пришлось совместить "тупой" метод с "красивым" - тогда "отслеживание" работает полностью. Ну и механизм стопора ширины от кривых ручонок, естественно. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 04:03 |
|
|
start [/forum/topic.php?fid=60&msg=38202680&tid=2157074]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
119ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 272ms |
total: | 482ms |
0 / 0 |