Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Slider: как запретить отображать значение-примечание? / 11 сообщений из 11, страница 1 из 1
18.02.2010, 12:57
    #36477370
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider: как запретить отображать значение-примечание?
При перемещении ползунка сверху отображается "в примечании" величина-значение.
Как это убрать (несолидно, лучше маленький комбобокс справа)? Если опять subclassing то желат. пример.
Slider на обычной форме.
"Ободок" при получении фокуса я напр. убрал засунув slider во фрейм.
...
Рейтинг: 0 / 0
18.02.2010, 13:34
    #36477507
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider: как запретить отображать значение-примечание?
Какая-то фигня получается, а не софтина. Если я люблю пользоваться клавиатурой, как я узнаю, что фокус на слайдере? Не солидно.

"Примечание" называется тултип и в стандартных пятых Common Controls его можно было бы отменить (если бы он был) перехватом сообщения WM_NOTIFY с кодом TTN_GETDISPINFO (механизм отображения тултипов един для всех коммон контролов). Вы же используете еретические шестые, в которых этот тултип может не быть стандартной фичей слайдера (о чем мне доподлинно не известно).

Jah loves you.
...
Рейтинг: 0 / 0
18.02.2010, 14:09
    #36477629
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider: как запретить отображать значение-примечание?
Спокойно,
по поводу примечания вопрос вроде как решен:

Код: 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.
Private Const WM_USER = &H400&
Private Const TBM_GETTOOLTIPS = (WM_USER +  30 )
Private Const TTM_ACTIVATE = (WM_USER +  1 )

Private Declare Function SendMessage Lib "user32" _
   Alias "SendMessageA" _
  (ByVal hWnd As Long, _
   ByVal wMsg As Long, _
   ByVal wParam As Long, _
   lParam As Any) As Long

Public Function Slider_ActivateToolTips(hwndSlider As Long, _
                                        bEnabled As Boolean) As Long
   Dim hToolTips As Long
  'retrieve the handle to the ToolTip
  'control assigned to the slider
   hToolTips = SendMessage(hwndSlider, _
                           TBM_GETTOOLTIPS, _
                           ByVal  0 &, _
                           ByVal  0 &)
   If hToolTips <>  0  Then
      'activate or deactivate the ToolTip control
       Slider_ActivateToolTips = SendMessage(hToolTips, _
                                             TTM_ACTIVATE, _
                                             ByVal Abs(bEnabled), _
                                             ByVal  0 &)
   End If
End Function

Private Sub Form_Load()
    Slider_ActivateToolTips Slider1.hWnd, False
End Sub

>"Ободок" при получении фокуса я напр. убрал засунув slider во фрейм.Не солидно.
>Какая-то фигня получается, а не софтина. Если я люблю пользоваться клавиатурой, как я узнаю, что фокус на слайдере? Не солидно.

Блин, и вы правы, и я прав, и в то же время неправ, потому как вы все таки правы.
Чтоб было и эстетично и правильно , надо реализовать следующее:
1) При изначальной загрузке формы, и даже если двигать (мышкой) ползунок фокуса там быть не должно.
2) А если вы воспользовались TAB то он появляется, на здоровье.
Так в нормальных приложениях чтоб "солидно".
А эти точечки VB-default просто бесят.
C Tab-стрипом я как то реализовал эту красоту(1) совмещенную с правильностью(2), надо бы взглянуть.
C ходу идеи есть? (на форме только Slider, дублирующий Combobox-предполагается, еще не делал, OK и Cancel).
...
Рейтинг: 0 / 0
18.02.2010, 14:35
    #36477719
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider: как запретить отображать значение-примечание?
DrawFocusRect, если фокус уже нарисован, она его сотроет.

Jah loves you.
...
Рейтинг: 0 / 0
18.02.2010, 14:45
    #36477761
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider: как запретить отображать значение-примечание?
>DrawFocusRect
пойду проверю..

чего делает "нормальное" приложение я как бы понял, не понял как
Оно все прекрасно фокусирует, но не отображает точки.
А отображать их начинает когда user решил нажать впервые tab/стрелка вправо/влево/вверх/вниз, но уж коль скоро user это сделал одиножды, то фокус уже отображается даже если мышкой.
А в табстрипе я посмотрел, просто аккуратно перевожу фокус куда нибудь на OK вниз при перещелкивании вкладок, здесь это не прокатит.
...
Рейтинг: 0 / 0
18.02.2010, 15:22
    #36477897
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider: как запретить отображать значение-примечание?
Код: plaintext
1.
2.
3.
4.
5.
Private Sub Slider1_GotFocus()
    Dim RC As RECT
    GetClientRect Slider1.hwnd, RC
    DrawFocusRect Slider1.hwnd, RC
    Slider1.Refresh
End Sub
Чет она хреново работает.
...
Рейтинг: 0 / 0
18.02.2010, 15:27
    #36477912
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider: как запретить отображать значение-примечание?
Slider1.Refresh

вам всё портит! или сами инвалидируйте или не занимайтесь извращениями с API
...
Рейтинг: 0 / 0
18.02.2010, 15:44
    #36477959
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider: как запретить отображать значение-примечание?
Konst_One,
ну если убрать то вообще ничего не будет, но не суть..

>не занимайтесь извращениями с API
А как нормально сделать чтоб этих точек вообще не было до нажатия user-ом tab/стрелки.

Я конечно могу извратиться без API, "раздвинув" фрейм, упомянутый в самом начале, что не одобрил Antonariy и я с этим согласился.( по событию tab/стрелки)
Но это ж неправильно каждый раз такой огород сажать...

Просто эти фокусные точки сразу в таких элементах, это очень похабно выглядит.
...
Рейтинг: 0 / 0
18.02.2010, 15:52
    #36477984
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider: как запретить отображать значение-примечание?
проблема в том, что все activex от mscomctl и тп имеют встроенные сабклассинг-функции и добиться от них вменяемого поведения очень сложно. выход - писать свой собственный activex control , который покроет ваш функционал.

PS
посмотрите на vbaccelerator, может что и подберёте себе.

PS PS
tabstrip - самый глючный контрол из этого семейства
...
Рейтинг: 0 / 0
18.02.2010, 17:37
    #36478313
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider: как запретить отображать значение-примечание?
Чем искать непонятное и осмысливать глючное, накатал вот это. Оно все делает.
Код: 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.
Dim AllowFocus As Boolean
Private Sub Form_Load()
    AllowFocus = False
End Sub
Private Sub SliderQ_KeyDown(KeyCode As Integer, Shift As Integer)
    If AllowFocus = False Then
        If KeyCode =  37  Or KeyCode =  38  Or KeyCode =  39  Or KeyCode =  40  Or KeyCode =  9  Then
            AllowFocus = True
            showF
            CommandOK.SetFocus
        End If
    End If
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    If AllowFocus = False Then
        If KeyCode =  37  Or KeyCode =  38  Or KeyCode =  39  Or KeyCode =  40  Or KeyCode =  9  Then
            AllowFocus = True
            showF
        End If
    End If
End Sub

Sub showF()
    Frame1.Left = Frame1.Left -  10 
    Frame1.Top = Frame1.Top -  20  'хотя не понимаю почему 20 а не 10
    Frame1.Width = Frame1.Width +  50 
    Frame1.Height = Frame1.Height +  30 
    SliderQ.Left = SliderQ.Left +  10 
    SliderQ.Top = SliderQ.Top +  10 
End Sub
Типа раздвинем рамку, увидим контур, сам slider типа неподвижным остался.

Но блин, код детский, а на TaB(=9) не срабатывает. Где опять собака?
...
Рейтинг: 0 / 0
19.02.2010, 02:55
    #36479003
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Slider: как запретить отображать значение-примечание?
>Но блин, код детский, а на TaB(=9) не срабатывает. Где опять собака?
вот слайдер,собака, и перехватывает TAB
>имеют встроенные сабклассинг-функции и добиться от них вменяемого поведения очень сложно
все согласно как сказано...не одно так другое

В общем добил я предыдущий детский код до вменяевого состояния, потасовав чуть Tab-индексы и Tab-стопы, родилось нечто более менее вменяемое и приличное на ощупь чего хотелось и на этом успокоился.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Slider: как запретить отображать значение-примечание? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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