Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Slider, он же Trackbar. Вопросы. / 9 сообщений из 9, страница 1 из 1
27.08.2012, 08:45
    #37931173
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider, он же Trackbar. Вопросы.
Надо сделать регулятор громкости с подложкой из 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
27.08.2012, 14:21
    #37931823
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider, он же Trackbar. Вопросы.
1) Вопрос простой. В вертикальном положении он меняет от 0 до 100 сверху вниз, а не снизу вверх. Как сделать. Без извращений над числами. Снизу - 0 Сверху -100.Разработчики слайдера рассчитывали, что программисты в состоянии поизвращаться над числами в рамках школьного курса.
Код: vbnet
1.
myValue = Slider1.Max - Slider1.Value
...
Рейтинг: 0 / 0
27.08.2012, 15:06
    #37931927
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider, он же Trackbar. Вопросы.
AntonariyСнизу - 0 Сверху -100.что программисты в состоянии поизвращаться над числами
Глупо конечно что нет простого способа его перевернуть.
Вот извращение с кнопками вверх-вниз вправо-влево оне продумали,
а то что он в вертикальном положении на голове стоит -нет.

Хорошо, ну а по стилям-красивостям идей нет? Узкий прогрессбар хотя бы подложить под него и ползунок сместить от линии например хотя бы возможно (родной индикатор на 7-ке выглядит "не в тему", на XP вообще не показывает и похоже его жирное похабство - ширину и вид - убрать не представляется возможным)?
Я пока сильно в сообщения и т.п. не лазил, но сдается мне что особо ничего не сделаешь.
...
Рейтинг: 0 / 0
28.08.2012, 13:50
    #37933506
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider, он же Trackbar. Вопросы.
Ну, а примеров кастомизации Slider/Trackbar никто не подкинет.
Ну, допустим, я хочу сделать область Range (индикатора) тоже прозрачной,
изменить цвет индикатора, ширину индикатора.
Custom Draw ?
Нет у кого нибудь примеров?
Все чего с ходу находится это .net.
Что нибудь в духе:
http://www.codeproject.com/Articles/57127/MediaSlider-An-Alternative-to-the-Trackbar-Control
меня очень бы устроило.
То как у меня на картинке не очень то смотрится, особенно когда рядом кнопки прозрачные.
Ну т.е. например оставить только контуры Range (индикатора) и заменить синий цвет индикатора на красный.
Ну, ползунок м.б. облагородить.
...
Рейтинг: 0 / 0
28.08.2012, 14:45
    #37933619
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider, он же Trackbar. Вопросы.
Custom Draw у всех коммон контролов делается одинаково, отличия в некоторых сообщениях.
Вот особенности Custom Draw в тракбаре, вот общий мануал по нему.
...
Рейтинг: 0 / 0
28.08.2012, 17:24
    #37934096
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider, он же Trackbar. Вопросы.
Antonariy,
это я все просматривал.
Я и то уже лучше ссылку нашел:
http://www.rsdn.ru/forum/winapi/1647607.flat.aspx
Но хотелось бы конкретный пример чтоб можно было пощупать.
Я понимаю что код может быть на C, но хотя б чтоб картинка прилагалась к чему стремится.
Net-овские примеры видел, но их понимать тяжело и не факт что это переводимо.
...
Рейтинг: 0 / 0
28.08.2012, 18:33
    #37934243
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider, он же Trackbar. Вопросы.
Ну, нарисовал я структуру, могу стереть фон например целиком,
или стереть ползунок.
а дальше что делать?
Я понимаю, что рисовать на 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
28.08.2012, 19:12
    #37934286
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider, он же Trackbar. Вопросы.
Из lvcd.hdc нужно получить размеры отрисовываемой области с помощью GetClipBox для начала. А рисовать с помощью BitBlt. Обычно берется рисунок из ресурсов и растягивается на область. Я как бы тоже не художник.
...
Рейтинг: 0 / 0
28.08.2012, 19:46
    #37934315
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider, он же Trackbar. Вопросы.
Antonariy,

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


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