powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Splitter -потеря фокуса сплиттером
25 сообщений из 25, страница 1 из 1
Splitter -потеря фокуса сплиттером
    #38782245
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тянем Splitter мышкой, в этот момент жмем Ctrl+ESC
Дальше палка двоится, глючит и т.п.
Net- Splitter по умолчанию корректного поведения не обеспечивает.

В VB6 решалось так:

Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
Private Sub picSplitMain_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  If Button = vbLeftButton Then 
    HookSplitter picSplitMain.hwnd
  End If
  DoEvents
  m_cSplitMain.MouseDown Button, Shift, x, y
End Sub

Public Sub HookSplitter(gHW_ As Long)
  If IsHooked Then Exit Sub '
  IsHooked = True
  'Start subclassing.
  gHW = gHW_
  OldSplitFWindowProc = SetWindowLong(gHW, GWL_WNDPROC, _
   AddressOf NewSplitFWindowProc)
End Sub

Public Sub UnhookSplitter()
  Dim temp As Long

  'Cease subclassing.
  temp = SetWindowLong(gHW, GWL_WNDPROC, OldSplitFWindowProc)
  IsHooked = False
End Sub

Function NewSplitFWindowProc(ByVal hwnd As Long, ByVal Msg As Long, _
 ByVal wParam As Long, ByVal lParam As Long) As Long

  If Msg = WM_CAPTURECHANGED Then
    Call UnhookSplitter
    m_splitter.MouseUp 0, 0, 0, 0
  Else
    NewSplitFWindowProc = CallWindowProc(OldSplitFWindowProc, hwnd, Msg, _
     wParam, lParam)
  End If
End Function



Сабклассить контейнер Splitter? Или можно проще?
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38782291
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Тянем Splitter мышкой, в этот момент жмем Ctrl+ESC
Дальше палка двоится, глючит и т.п.Кликаешь в него и его отпускает :)
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38782377
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAКликаешь в него и его отпускает :)
Вот не люблю я эти сопли.
Чисто за счет знания реализации сплиттера на классике удалось угадать фикс (сабклассинг по VB6-принципу с SetWindowLong через делегата -написал себе класс год назад для подобных целей, как снимать .Net-овский я не знаю).
Но в данном случае его (Splitter) еще колбасит при напр. нажатии на Alt при движении.
Частично это решается обновлением панели. Но это еще надо смотреть после того как напичкаю панель содержимым.
Код: 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.
Public Class Form1
  Dim WithEvents s_Splitter1 As SubclassMyHWND
  Dim IsSplitter1Hooked As Boolean 'применен хук

  Private Sub s_Splitter1_CallBackWndProc(ByRef m As Message, ByRef Cancel As Boolean) Handles s_Splitter1.CallBackWndProc
    Debug.WriteLine(m.ToString)
    If m.Msg = WM_CAPTURECHANGED Then
      s_Splitter1.UnSubclass()
      IsSplitter1Hooked = False
      SendMessage(Me.Splitter1.Handle, WM_LBUTTONUP, 0, 0)
      Panel2.Refresh()
      Cancel = True
    End If
  End Sub

  Private Sub Splitter2_MouseDown(sender As Object, e As MouseEventArgs) Handles Splitter1.MouseDown
    If e.Button = Windows.Forms.MouseButtons.Left Then 'только левая кнопка мыши
      If IsSplitter1Hooked Then Exit Sub
      IsSplitter1Hooked = True
      s_Splitter1 = New SubclassMyHWND
      s_Splitter1.Subclass(Splitter1.Handle)
    End If
  End Sub
End Class



Чеж так все криво в этом .Net.
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38782404
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Чеж так все криво в этом .Net.
В WPF ничего вышеописанного нет.
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38782409
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Речь идет о WinForm, все-таки это надстройка над классическими API. А вот WPF-это так понимаю полностью независимая кухня.
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38782437
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Чеж так все криво в этом .Net.
референс сорцы - смотришь иногда?

http://referencesource.microsoft.com
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38782514
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77skyANAКликаешь в него и его отпускает :)
Вот не люблю я эти сопли.
Чисто за счет знания реализации сплиттера на классике удалось угадать фикс (сабклассинг по VB6-принципу с SetWindowLong через делегата -написал себе класс год назад для подобных целей, как снимать .Net-овский я не знаю).
Но в данном случае его (Splitter) еще колбасит при напр. нажатии на Alt при движении.
Частично это решается обновлением панели. Но это еще надо смотреть после того как напичкаю панель содержимым.

Чеж так все криво в этом .Net.Хм, делать Вам больше не фиг.

За 11 лет ни один пользователь не пожаловался на splitter. Вы бы ещё в web решали проблемы в IE6- :)
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784202
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, сабклассинг здесь конечно перебор.

Достаточно:
Код: vbnet
1.
2.
3.
4.
  Private Sub Splitter1_MouseCaptureChanged(sender As Object, e As EventArgs) Handles Splitter1.MouseCaptureChanged
    SendMessage(Me.Splitter1.Handle, WM_LBUTTONUP, 0, 0)
    Panel2.Refresh()
  End Sub



Кстати, WM_LBUTTONUP .Net-методом послать никак?

>Хм, делать Вам больше не фиг.
Извини, я просто таким штукам учился у людей, которые умеют писать КОД с большой буквы, а не разводить детский сад типа "поковыряю в носу, щелкну 2 раза мышкой и исчезнет".
Взаимное положение ListView/Treeview
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784227
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Извини, я просто таким штукам учился у людей, которые умеют писать КОД с большой буквы, а не разводить детский сад типа "поковыряю в носу, щелкну 2 раза мышкой и исчезнет".
Взаимное положение ListView/Treeview К чему этот пафос? Вы с чего вообще решили, что пользователю нужен Splitter?

P.S.: в 2004-м я тоже писал КОД с большой буквы свои компоненты.
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784240
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

перфекционизм - опасная штука, ибо дорога ложка к обеду :)
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784241
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
да не обижайся, ни к чему пафос.
просто есть проблема (известная) и на уровне автоматики контрола она не решена, ее надо решить.

>Вы с чего вообще решили, что пользователю нужен Splitter?
Странный вопрос, чтоб взаимное положение элементов изменять.
Не, ну в телевизоре неисправном когда кадры сверху вниз бегут, изображение в принципе видно. Если так подходить, можно и ничего не делать.
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784277
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77>Вы с чего вообще решили, что пользователю нужен Splitter?
Странный вопрос, чтоб взаимное положение элементов изменять.
Не, ну в телевизоре неисправном когда кадры сверху вниз бегут, изображение в принципе видно. Если так подходить, можно и ничего не делать.А может ему меню сверху удобнее, чем дерево слева?

Понимаете, современные UIX дизайнеры ставят по сотне экспериментов в день, и могут легко сказать, что Ваше дерево слева - это моветон, что если задать нормальное начальное положение сплиттера, то его никто никогда вообще дёргать не будет, ну или очень редко :)
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784282
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилперфекционизм - опасная штука, ибо дорога ложка к обеду :)
Думаешь меня не бесит, что на мелочи столько времени уходит?
Но если я переписываю проект 1:1 с "древнего VB6" на "современный .Net",
почему он должен выглядеть хуже/глючнее, чем был (типа смазанные иконки, глючащие палки разделителей и т.п.)?
Тем более "все эти мелочи" уже когда-то были детально проработаны.
Это делается один раз, при этом код сильно упрощается, 90% API уйдут, это я уже понял.
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784378
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Изопропилперфекционизм - опасная штука, ибо дорога ложка к обеду :)
Думаешь меня не бесит, что на мелочи столько времени уходит?
Но если я переписываю проект 1:1 с "древнего VB6" на "современный .Net",
почему он должен выглядеть хуже/глючнее, чем был (типа смазанные иконки, глючащие палки разделителей и т.п.)?
Тем более "все эти мелочи" уже когда-то были детально проработаны.
Это делается один раз, при этом код сильно упрощается, 90% API уйдут, это я уже понял.

Дмитрий, вы вообще в курсе, что WinForms - это не "современный .Net"? Поддержка и исправление багов у этой технологии отсутствуют.
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784550
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79WinForms - это не "современный .Net"?
зато для ряда задач - очень эффективный во всех смыслах
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784551
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дим, если ты свой основной проект собираешься переводить (а он довольно большой, как я понимаю), может есть смысл рассмотреть сразу WPF?
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784559
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProWPF?
это ж тоже труп. И там косяков выше крыши
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784568
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилэто ж тоже трупна ASP Дмитрий не согласится )))
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784570
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProИзопропилэто ж тоже трупна ASP Дмитрий не согласится )))
ну а Qt он точно не согласится.
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784611
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДим, если ты свой основной проект собираешься переводить (а он довольно большой, как я понимаю), ...
Ага.
Год назад не стал, счас таки решил добивать.
Собрал новый комп для работы, перешел с XP на 8.1, поставил VS2013, чего мелочиться.
Самое время добить.

Современное и вечно живое - это Win32 API и Common Controls.
И именно это то что я использую.
И они то как раз всегда современные и развиваются. На XP своя тема, на Win 8 -своя - "современная".

А WPF -это так понимаю полностью своя кухня, поэтому не соглашусь.
Это такая современность, кот. сдохнет, когда ее перестанут поддерживать.

WinForms -это обертка над "Common Controls", более удобная и "современная" чем VB6.
Всякие "цветастенькие" Strip-контролы из WinForm я не рассматриваю и использовать вряд ли буду.

Можно и на VB6 продолжать делать "современно". Только очень тяжело.
Например, добавил новую ф-цию, надо дорисовать настройки в форму.
Когда ограничение в 256 контролов на форме и они давно исчерпаны, и даже "массивы контролов" практически исчерпаны - это уже большая работа, просто добавить 2 текстбокса. Это как пример.
Ну и очень много надо делать "стандартных API допиливаний" всякий раз.

Что касается сплиттера - это вообще не контрол, а некий удобный "стандартный прием". Конечно удобнее когда он уже реализован как "контрол", а не API-простыня.

Решил WinForm, значит так будет. Чего рассуждать, работать надо.
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784670
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77И они то как раз всегда современные и развиваются.
скорее -"актуальные"
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38784827
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилShocker.ProWPF?
это ж тоже труп.
С чего бы это такой вывод? Последняя версия фреймворка вполне себе содержит всякие обновления и нововведения: http://msdn.microsoft.com/en-us/library/bb613588(v=vs.110).aspx . Вы, часом, WPF с SL не перепутали?
Ну, и как бы ModernUI - это всё тот же XAML+MVVM, т.е. фактически та же идеология и те же принципы.
ИзопропилИ там косяков выше крыши
Можете перечислить навскидку пару-тройку?
Дмитрий77Современное и вечно живое - это Win32 API и Common Controls.
Блажен, кто верует. Слово WinRT вам ни о чем не говорит? Некоторые товарищи вот уже радостно знакомятся с новыми тенденциями .
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38785340
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныБлажен, кто верует. Слово WinRT вам ни о чем не говорит? Некоторые товарищи вот уже радостно знакомятся с новыми тенденциями .
Конечно говорит. И я еще весной радостно поставил себе на ноут 2013-ю студию (которая "писать под Windows" а не "писать под Desktop"). Но что-то у меня радость быстро ушла. Не стоит сюда пока лезть. Вот мое мнение:

15883665

И вот еще:

http://www.voipinfo.ru/forum/viewtopic.php?f=1&t=34170#p113431

(самый нижний топик)
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38785364
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Но что-то у меня радость быстро ушла.
Тем не менее, это достаточно близкое будущее.
...
Рейтинг: 0 / 0
Splitter -потеря фокуса сплиттером
    #38785612
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныТем не менее, это достаточно близкое будущее.
Видишь ли, судьба этого будущего не ясна, не факт что вообще приживется.
MS уже в 10-Preview делает кучу шагов назад к Desktop.
Этот GUI не очень хорош для серьезных приложений где есть много всего.
А то что не разрешено использовать API, кот. используются в библиотеках, кот. по 20 лет (я здесь GUI не имею ввиду) -это Ж.. Позволят- тогда можно думать.
Переписать какой-нибудь Opal под эти API - это нереально.
Ради интереса конечно могу автору Opal задать вопрос, что он об этом думает, но подозреваю - ничего хорошего.
Но с другой стороны в RT этих старых API то нет.
Я б сюда не лез пока вообще.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Splitter -потеря фокуса сплиттером
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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