powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Взаимное положение ListView/Treeview
25 сообщений из 59, страница 2 из 3
Взаимное положение ListView/Treeview
    #36662393
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Вот такой тулбар правильно отображается с выбранной темой? (Семёрки у меня тоже нет)
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36662679
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедикт,

Похоже ты ошибся темой
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36662852
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбоносдержи :)
Я добавил модуль для сабклассинга.
сюда добавил перехват сообщений:
Игорь, спасибо, посмотрю на днях, сейчас как бы чуть другие дела отвлекли.Спасибо.
Игорь ГорбоносБенедикт,
Похоже ты ошибся темой
Нет, он не ошибся, это я "виноват", просто тема не была раскрыта в свое время, а Бенедикт в этих вещах разбирается лучше всех, поэтому я рискнул озвучить здесь этот вопрос.
Дмитрий77Бенедикт,
... не часто вы здесь появляетесь....а по графике вы здесь первый
Вот с этой задачей даже близко не справился:
Градиенты в Vista стиле, и в частности подложка под Toolbar...
=============================================
БенедиктДмитрий77,
Вот такой тулбар правильно отображается с выбранной темой? (Семёрки у меня тоже нет)
Это проще нарисовать чем описать словами:


Я так понимаю "правильным" является черный фон тулбара, что с 3-мя кнопками.
Тогда даже при XP-стиле неправильно. (т.е. поведение вашего примера сходно с поведением того примера что я уже нашел, я давал ссылку выше)
Однако на Висте виден некий таки ново-положительный эффект: белая полоса и голубой фон, характерный обычно для полоски меню, а не для Toolbar. Догадки: за счет прозрачности Тулбар (и CoolBar?), в том что получается обычно (мой тест,обведен красным) этого не происходит.

Я так понимаю, вы Toolbar-v.5 вставили в Coolbar-v.6(comct332.ocx регистрировать пришлось)

Но, скажем так, еще сложность, я в реальной проге дополнительно наворачиваю: вставляю один ToolBar в другой, потому что высота 420 для плоского стиля(а меньше для 16х16 не дает) это много и ее можно уменьшить за счет вставки один в другой, манипулируя условными размерами картинок в привязанных ImageList-ах. Т.е. внешний ToolBar имеет меньшую высоту за счет того что в нем условно не 16х16, а скажем 12х12, надо смотреть чего я там делаю.
Но задачу хотя б для одного Тулбар решить...
А чего бы хотелось, это верхние 3 Вистовсие картинки (о спецефичности надписей рядом с картинками и т.п. речи пока не идет, только о подложке.)
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36666771
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносЯ добавил модуль для сабклассинга.
сюда добавил перехват сообщений:
Код: plaintext
1.
2.
3.
4.
Private Sub picSplitMain_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
   Hook Me.picSplitMain.hwnd
   m_cSplitMain.MouseDown Button, Shift, x, y
End Sub

Я вот над чем голову ломаю в этом тестовом примере. Для вертикального сплиттера все работает.
Мне в принципе только один вертикальный и нужен. Но все же...
Если сделать тоже самое для горизонтального
Код: plaintext
1.
2.
3.
Private Sub picSplitLeft_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
   Hook Me.picSplitLeft.hwnd
   m_cSplitLeft.MouseDown Button, Shift, x, y
End Sub
то не работает.
Сабклассинг запускается, WM_CAPTURECHANGED отлавливается,
m_splitter.MouseUp 0, 0, 0, 0 выполняется,
но основной код не выполняется.
т.е. изменение стиля не снимается.m_bInDrag почему-то false вроде как получается
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36666848
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Дмитрий77
> т.е. изменение стиля не снимается.m_bInDrag почему-то false вроде как получается

Не правильно, ты дядя Дима, бутерброд ешь (С) Кот Матроскин
Я в модуле сабкласса для кого переменную объявлял?
Код: plaintext
Public m_splitter As cSplitter
Чем её инициализировал в Form_Load()?
Код: plaintext
Set m_splitter = m_cSplitMain
И собственно для чего, что-бы выделение снимать, когда теряем фокус :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
   ByVal wParam As Long, ByVal lParam As Long) As Long

    If uMsg = WM_CAPTURECHANGED Then
          Call Unhook
'********************************
'  Вот это место снятия выделения при потере фокуса
  m_splitter.MouseUp  0 ,  0 ,  0 ,  0 
'********************************
   Else
        WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, _
           wParam, lParam)
    End If
End Function
Только потому, что так быстрее всего. Именно этот момент я и предлагал допилять. Момент ухода от глобальной переменной
или в сторону событий или в сторону прямого вызова функии снимающей выделение.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36667026
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,
Код: plaintext
Set m_splitter = m_cSplitMain
Ааааааа...так вот оно что..недоглядел
а я то думал..что это за такой m_splitter волшебный с потолка взявшийся.
Ну тода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
   Set m_splitter = m_cSplitMain
   Set m_splitter2 = m_cSplitLeft

Public m_splitter As cSplitter
Public m_splitter2 As cSplitter

    If uMsg = WM_CAPTURECHANGED Then
          'Debug.Print "WM_CAPTURECHANGED"
          Call Unhook
          If hw = frmSplitTest.picSplitMain.hwnd Then
            m_splitter.MouseUp  0 ,  0 ,  0 ,  0 
          ElseIf hw = frmSplitTest.picSplitLeft.hwnd Then
            m_splitter2.MouseUp  0 ,  0 ,  0 ,  0 
          End If
    Else
далее по месту.

Мне только теперь заново надо будет отрабатывать фейдер
Потому что у меня уже этот splitMain непрерывно сабклассился по условию IsVista

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Function NewSplitWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    'для событий picSplitMain
    If (Msg = &H7) Then ' Const WM_SETFOCUS = &H7
        Debug.Print wParam
        If Form1.TreeView1.hwnd = wParam Then
            'Call SendMessage(wParam, &H7, 0&, 0&)
            Form1.TreeView1.SetFocus
        End If
    End If
    NewSplitWindowProc = CallWindowProc( _
        OldSplitWindowProc, hwnd, Msg, wParam, _
        lParam)
End Function

Два сабклассинга одного и того же элемента наверно не прокатит, боюсь что ваш Hook включается слишком поздно. Но наверно можно точно также отследить потерю фокуса из TreeView в сторону сплиттера... Надо покопаться...
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36667074
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе может и прокатить, какая ему разница какую функцию вызывать :)
Ну а нет, тогда в свой сабкласс добавь обработку события изменения фокуса

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36667466
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносВ принципе может и прокатить, какая ему разница
Да, прокатило, т.е. я запускаю 2 сабклассинга для picSplitMain:
1) свой непрерывный, запрещает перевод фокуса с Treeview на на picSplitMain. На системах отличных от Vista не запускается. (win7 не дорабатывал, скорее всего доработаю потом одной фразой типа IsWinVista==IsWin7 в модуле определения OS для всей программы и посмотрю чего будет, скорее всего ничего плохого не будет)
2) Ваш Hook, кот. живет от момента picSplitMain_MouseDown до момента WM_CAPTURECHANGED(кот. в свою очередь происходит по Mouse_Up или по случайной потере захвата, т.е. снимается по любому) Запускать в непрерывном режиме я б этот Hook не рискнул...
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693257
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Set m_cSplitLeft = New cSplitter
   m_cSplitLeft.Orientation = cSPLTOrientationHorizontal
   m_cSplitLeft.MinimumSize(cSPLTLeftOrTopPanel) = picSplitLeft.ScaleY(cmdTop.Height, picSplitLeft.ScaleMode, vbPixels)
   m_cSplitLeft.FullDrag = False
   m_cSplitLeft.Container = picSplitLeft
   m_cSplitLeft.Bind cmdTop, lstTest

   Set m_cSplitMain = New cSplitter
   m_cSplitMain.Orientation = cSPLTOrientationVertical
   m_cSplitMain.FullDrag = False
   m_cSplitMain.Container = picSplitMain
   m_cSplitMain.MinimumSize(cSPLTLeftOrTopPanel) = picSplitMain.ScaleX(picSplitLeft.Width, picSplitMain.ScaleMode, vbPixels)
   m_cSplitMain.Bind picSplitLeft, txtEditor
может кто нибудь комментарии к строкам прописать,
а то хочу еще добавить объект по типу m_cSplitLeft2 и у меня они друг на друга лезут
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693290
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
'Создаем новый объект
Set m_cSplitLeft = New cSplitter
' Устанавливаем тип ориентирования, ну т.е. вертикальный или горизонтальный сплиттер
m_cSplitLeft.Orientation = cSPLTOrientationHorizontal
' Вычисляем и устанавливаем границу, дальше которой сплиттер передвигатся не будет. В данном случае это размер слева или 
сверху
m_cSplitLeft.MinimumSize(cSPLTLeftOrTopPanel) = picSplitLeft.ScaleY(cmdTop.Height, picSplitLeft.ScaleMode, vbPixels)
' Судя по названию, и обсуждению топика - отображать полную перерисовку при перемещении или нет
m_cSplitLeft.FullDrag = False
'Делаем привязку к контейнеру, в рамках которого буждет производится перемещения
m_cSplitLeft.Container = picSplitLeft
' Ну и собственно связываем верхний/нижний(правый/левый для вертикальной ориентации) контролы, для изменения размеров и 
перемещения
m_cSplitLeft.Bind cmdTop, lstTest

' Тоже самое, только сплиттер вертикальный, и контролы другие :)
Set m_cSplitMain = New cSplitter
m_cSplitMain.Orientation = cSPLTOrientationVertical
m_cSplitMain.FullDrag = False
m_cSplitMain.Container = picSplitMain
m_cSplitMain.MinimumSize(cSPLTLeftOrTopPanel) = picSplitMain.ScaleX(picSplitLeft.Width, picSplitMain.ScaleMode, 
vbPixels)
m_cSplitMain.Bind picSplitLeft, txtEditor

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693376
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,
спасибо , а то по разному пробовал но не понял))вот это особо интересно было
Код: plaintext
1.
' Вычисляем и устанавливаем границу, дальше которой сплиттер передвигатся не будет. В данном случае это размер слева или сверху
m_cSplitLeft.MinimumSize(cSPLTLeftOrTopPanel) = picSplitLeft.ScaleY(cmdTop.Height, picSplitLeft.ScaleMode, vbPixels)
и это тоже
Код: plaintext
1.
2.
' Ну и собственно связываем верхний/нижний(правый/левый для вертикальной ориентации) контролы, для изменения размеров и 
перемещения
m_cSplitLeft.Bind cmdTop, lstTest
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693400
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,
гляньте если не сложно , я че то не пойму так че несколько использовать нельзя
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693432
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,
ерунду отправил прошлый раз
у меня перемычка на
picSplitLeft и picSplitLeft2 как то странно себя ведут
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693440
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,

Сейчас тоже ерунду отправил
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   Set m_cSplitLeft = New cSplitter
   m_cSplitLeft.Orientation = cSPLTOrientationHorizontal
   m_cSplitLeft.MinimumSize(cSPLTLeftOrTopPanel) = picSplitLeft.ScaleY(Command2.Height, picSplitLeft.ScaleMode, vbPixels)
   m_cSplitLeft.FullDrag = False
   m_cSplitLeft.Container = picSplitLeft
   m_cSplitLeft.Bind Command2, Command1
   
    Set m_cSplitLeft2 = New cSplitter
   m_cSplitLeft.Orientation = cSPLTOrientationHorizontal
   m_cSplitLeft.MinimumSize(cSPLTLeftOrTopPanel) = picSplitLeft2.ScaleY(Command3.Height, picSplitLeft2.ScaleMode, vbPixels)
   m_cSplitLeft.FullDrag = False
   m_cSplitLeft.Container = picSplitLeft2
   m_cSplitLeft.Bind Command3, Command4
не замечаешь странностей
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693445
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Копипаст чреват
Поправил на cSplitLeft2 - все очень красиво
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693449
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
ну да точно))
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693456
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
нет нет , че то я рано да сказал))
а где поменяли?
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693459
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
нет нет , че то я рано да сказал))
а где поменяли?
Код: plaintext
1.
2.
3.
4.
5.
    Set m_cSplitLeft2 = New cSplitter
   m_cSplitLeft.Orientation = cSPLTOrientationHorizontal
   m_cSplitLeft.MinimumSize(cSPLTLeftOrTopPanel) = picSplitLeft2.ScaleY(Command3.Height, picSplitLeft2.ScaleMode, vbPixels)
   m_cSplitLeft.FullDrag = False
   m_cSplitLeft.Container = picSplitLeft2
   m_cSplitLeft.Bind Command3, Command4
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693463
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
вот блин , надо было так не заметить)))
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693474
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
а задать ширину picturebox-y который слева?
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693475
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
вот блин , надо было так не заметить)))
ну вообще очевидно было, когда двигаешь один сплиттер, а вместо него двигается другой
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693514
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
а на эту гляньте (криво получается)
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693521
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,

не нашел ничего кривого
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693525
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
...
Рейтинг: 0 / 0
Взаимное положение ListView/Treeview
    #36693528
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,

Тянется
...
Рейтинг: 0 / 0
25 сообщений из 59, страница 2 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Взаимное положение ListView/Treeview
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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