powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Slider, он же Trackbar. Вопросы.
9 сообщений из 9, страница 1 из 1
Slider, он же Trackbar. Вопросы.
    #37931173
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо сделать регулятор громкости с подложкой из volume level (уровень тек. сигнала).
Мне нравится как это сделано на семерке (висте).
Speakers (с индикатором уровня), Микрофон без индикатора.
Очевидно слайдер.
1) Вопрос простой. В вертикальном положении он меняет от 0 до 100 сверху вниз, а не снизу вверх. Как сделать. Без извращений над числами. Снизу - 0 Сверху -100.

Мне удалось сделать background прозрачным. Точно также как и с кнопками, только WM_CTLCOLORSTATIC вместо WM_CTLCOLORBTN, а код тот же. TBS_TRANSPARENTBKGND кстати для подложки из картинки не работает.
Но вот как мне привести

2) Я не могу понять что они используют для индикатора и для "тени". Первое очевидное предположение -
SelectRange=true.
Но:
-при попытке сузить ширину slider это сужает ширину range, но плохо сказывается на ползунке (скокоживается до неприличности).
-ширина контура фокуса элемента и вид ползунка намекает на то, что используется ширина близкая к стандартной
-одинаковый вид "индикатора" и "тени" на "аэро" и на "классике" наводит на мысль, что все таки там слайдер без range, а "индикатор" и "тень" -это не стандартные контролы, не Themes, а левая рисовка (хотя и разработчиками виндов).
-У меня цвет индикатора синий (при включенной теме). Хотелось бы хотя бы красный в стиле progressbar. М.б. индикатор range -это автоматом прогрессбар привязан и надо получить его hwnd и применить стили?
-Даже если там slider без range, то как изменить смещение ползунка? (в моем варианте он ближе к центру)
И как тогда "индикатор" сделать? ProgressBar отдельно пририсовать? И как сделать "тень" ?

Ну т.е. нужны любые соображения. Хочется сделать красиво и при этом без самопала.

Да, еще. На XP-стиле индикатор который родной range почему-то не виден.

Чтоб не быть голословным сделал два скрина специально на "аэро" и "на классике".
...
Рейтинг: 0 / 0
Slider, он же Trackbar. Вопросы.
    #37931823
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Вопрос простой. В вертикальном положении он меняет от 0 до 100 сверху вниз, а не снизу вверх. Как сделать. Без извращений над числами. Снизу - 0 Сверху -100.Разработчики слайдера рассчитывали, что программисты в состоянии поизвращаться над числами в рамках школьного курса.
Код: vbnet
1.
myValue = Slider1.Max - Slider1.Value
...
Рейтинг: 0 / 0
Slider, он же Trackbar. Вопросы.
    #37931927
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyСнизу - 0 Сверху -100.что программисты в состоянии поизвращаться над числами
Глупо конечно что нет простого способа его перевернуть.
Вот извращение с кнопками вверх-вниз вправо-влево оне продумали,
а то что он в вертикальном положении на голове стоит -нет.

Хорошо, ну а по стилям-красивостям идей нет? Узкий прогрессбар хотя бы подложить под него и ползунок сместить от линии например хотя бы возможно (родной индикатор на 7-ке выглядит "не в тему", на XP вообще не показывает и похоже его жирное похабство - ширину и вид - убрать не представляется возможным)?
Я пока сильно в сообщения и т.п. не лазил, но сдается мне что особо ничего не сделаешь.
...
Рейтинг: 0 / 0
Slider, он же Trackbar. Вопросы.
    #37933506
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, а примеров кастомизации Slider/Trackbar никто не подкинет.
Ну, допустим, я хочу сделать область Range (индикатора) тоже прозрачной,
изменить цвет индикатора, ширину индикатора.
Custom Draw ?
Нет у кого нибудь примеров?
Все чего с ходу находится это .net.
Что нибудь в духе:
http://www.codeproject.com/Articles/57127/MediaSlider-An-Alternative-to-the-Trackbar-Control
меня очень бы устроило.
То как у меня на картинке не очень то смотрится, особенно когда рядом кнопки прозрачные.
Ну т.е. например оставить только контуры Range (индикатора) и заменить синий цвет индикатора на красный.
Ну, ползунок м.б. облагородить.
...
Рейтинг: 0 / 0
Slider, он же Trackbar. Вопросы.
    #37933619
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Custom Draw у всех коммон контролов делается одинаково, отличия в некоторых сообщениях.
Вот особенности Custom Draw в тракбаре, вот общий мануал по нему.
...
Рейтинг: 0 / 0
Slider, он же Trackbar. Вопросы.
    #37934096
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
это я все просматривал.
Я и то уже лучше ссылку нашел:
http://www.rsdn.ru/forum/winapi/1647607.flat.aspx
Но хотелось бы конкретный пример чтоб можно было пощупать.
Я понимаю что код может быть на C, но хотя б чтоб картинка прилагалась к чему стремится.
Net-овские примеры видел, но их понимать тяжело и не факт что это переводимо.
...
Рейтинг: 0 / 0
Slider, он же Trackbar. Вопросы.
    #37934243
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, нарисовал я структуру, могу стереть фон например целиком,
или стереть ползунок.
а дальше что делать?
Я понимаю, что рисовать на lvcd.hdc
А че рисовать? Нужны какбы примеры-с. Я не худозник.

Код: vbnet
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.
    Case WM_NOTIFY
      Static lvcd As NMCUSTOMDRAW
      MoveMemory lvcd, ByVal lParam, Len(lvcd)   ' every structs' member is a Long
      Select Case lvcd.hdr.code
        Case NM_CUSTOMDRAW
          If (lvcd.hdr.hwndFrom = Form1.Slider1.hWnd) Then 'в смысле какой контрол собрался перерисовываться
            Debug.Print "NM_CUSTOMDRAW"
            Select Case lvcd.dwDrawStage
                Case CDDS_PREPAINT
                    ' Tell the trackbar we want CDDS_ITEMPREPAINT for each item
                    NewDigitsWindowProc = CDRF_NOTIFYITEMDRAW
                    Exit Function
                Case CDDS_ITEMPREPAINT
                    Select Case lvcd.dwItemSpec
                        Case TBCD_THUMB
                        Case TBCD_CHANNEL
                            NewDigitsWindowProc = CDRF_SKIPDEFAULT
                            Exit Function
                        Case TBCD_TICS
                            NewDigitsWindowProc = CDRF_SKIPDEFAULT
                            Exit Function
                        Case Else
                    End Select
                Case Else
            End Select
          End If
        Case Else
      End Select
...
Рейтинг: 0 / 0
Slider, он же Trackbar. Вопросы.
    #37934286
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из lvcd.hdc нужно получить размеры отрисовываемой области с помощью GetClipBox для начала. А рисовать с помощью BitBlt. Обычно берется рисунок из ресурсов и растягивается на область. Я как бы тоже не художник.
...
Рейтинг: 0 / 0
Slider, он же Trackbar. Вопросы.
    #37934315
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Я бы честно с ползунком бы чего нибудь придумал, TBCD_CHANNEL убрал бы нафик (он невменяемый), а на его место подложил бы вертик. progressbar, кот. на семерках отлично смотрится(правда его bkg тоже надо как то убрать) , а на классике можно цвет задать.
Но у меня получается вот чего:
]
Серый -это progressbar, т.е. вместо него фон родительской картинки. (Slider-сверху).
Если сделать progressbar сверху, то ползунка видно не будет.
Фон слайдера убирал как фон кнопки, ссылка на мою тему в начале.
Грубо говоря, ползунок должен ползать поверх прогрессбара.
Ну, ползунок например на 32-битную иконку поменять.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Slider, он же Trackbar. Вопросы.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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