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

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

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

Код: 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
Slider: как запретить отображать значение-примечание?
    #36477719
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrawFocusRect, если фокус уже нарисован, она его сотроет.

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

чего делает "нормальное" приложение я как бы понял, не понял как
Оно все прекрасно фокусирует, но не отображает точки.
А отображать их начинает когда user решил нажать впервые tab/стрелка вправо/влево/вверх/вниз, но уж коль скоро user это сделал одиножды, то фокус уже отображается даже если мышкой.
А в табстрипе я посмотрел, просто аккуратно перевожу фокус куда нибудь на OK вниз при перещелкивании вкладок, здесь это не прокатит.
...
Рейтинг: 0 / 0
Slider: как запретить отображать значение-примечание?
    #36477897
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Slider: как запретить отображать значение-примечание?
    #36477912
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slider1.Refresh

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

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

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

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

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

PS PS
tabstrip - самый глючный контрол из этого семейства
...
Рейтинг: 0 / 0
Slider: как запретить отображать значение-примечание?
    #36478313
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем искать непонятное и осмысливать глючное, накатал вот это. Оно все делает.
Код: 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
Slider: как запретить отображать значение-примечание?
    #36479003
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Но блин, код детский, а на TaB(=9) не срабатывает. Где опять собака?
вот слайдер,собака, и перехватывает TAB
>имеют встроенные сабклассинг-функции и добиться от них вменяемого поведения очень сложно
все согласно как сказано...не одно так другое

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


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