Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Splitter -потеря фокуса сплиттером / 25 сообщений из 25, страница 1 из 1
20.10.2014, 20:32
    #38782245
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
Тянем 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
20.10.2014, 22:06
    #38782291
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
Дмитрий77Тянем Splitter мышкой, в этот момент жмем Ctrl+ESC
Дальше палка двоится, глючит и т.п.Кликаешь в него и его отпускает :)
...
Рейтинг: 0 / 0
21.10.2014, 03:20
    #38782377
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
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
21.10.2014, 06:23
    #38782404
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
Дмитрий77Чеж так все криво в этом .Net.
В WPF ничего вышеописанного нет.
...
Рейтинг: 0 / 0
21.10.2014, 06:50
    #38782409
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
Сон Веры Павловны,

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

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

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

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

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

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

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

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

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

Дмитрий, вы вообще в курсе, что WinForms - это не "современный .Net"? Поддержка и исправление багов у этой технологии отсутствуют.
...
Рейтинг: 0 / 0
22.10.2014, 18:58
    #38784550
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
Arm79WinForms - это не "современный .Net"?
зато для ряда задач - очень эффективный во всех смыслах
...
Рейтинг: 0 / 0
22.10.2014, 18:59
    #38784551
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
Дим, если ты свой основной проект собираешься переводить (а он довольно большой, как я понимаю), может есть смысл рассмотреть сразу WPF?
...
Рейтинг: 0 / 0
22.10.2014, 19:03
    #38784559
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
Shocker.ProWPF?
это ж тоже труп. И там косяков выше крыши
...
Рейтинг: 0 / 0
22.10.2014, 19:09
    #38784568
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
Изопропилэто ж тоже трупна ASP Дмитрий не согласится )))
...
Рейтинг: 0 / 0
22.10.2014, 19:11
    #38784570
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
Shocker.ProИзопропилэто ж тоже трупна ASP Дмитрий не согласится )))
ну а Qt он точно не согласится.
...
Рейтинг: 0 / 0
22.10.2014, 20:30
    #38784611
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
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
22.10.2014, 21:52
    #38784670
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
Дмитрий77И они то как раз всегда современные и развиваются.
скорее -"актуальные"
...
Рейтинг: 0 / 0
23.10.2014, 06:08
    #38784827
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
Изопропил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
23.10.2014, 13:39
    #38785340
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Splitter -потеря фокуса сплиттером
Сон Веры ПавловныБлажен, кто верует. Слово WinRT вам ни о чем не говорит? Некоторые товарищи вот уже радостно знакомятся с новыми тенденциями .
Конечно говорит. И я еще весной радостно поставил себе на ноут 2013-ю студию (которая "писать под Windows" а не "писать под Desktop"). Но что-то у меня радость быстро ушла. Не стоит сюда пока лезть. Вот мое мнение:

15883665

И вот еще:

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

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


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