|
Выгрузка Ribbon Framework динамически с восстановлением формы
|
|||
---|---|---|---|
#18+
Речь идет о родном Windows Ribbon Framework Использую .Net -обертку, не суть (а м.б. и суть). Windows Ribbon for WinForms Идея такая (переделываю старое приложение с классическим меню + Toolbar и т.п.): 1) Дать возможность использовать Ribbon 2) При этом дать возможность использовать старый интерфейс 3) Дать таки пользователю возможность выбирать между (1) Ribbon и (2) Menu+Toolbar Делаем тест. 1. Загружаю форму обычным образом. Обычная форма, отображается главное меню (System.Windows.Forms.MainMenu). 2. Стартую Windows Ribbon Framework (нарочно кнопкой и динамически) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Все отлично, меню убралось, появился Ribbon 3. А теперь пытаюсь переключиться обратно, как то так: Код: vbnet 1. 2. 3. 4.
_ribbon.Framework.Destroy() - так понимаю это IUIFramework::Destroy method Terminates and releases all objects, hooks, and references for an instance of the Windows Ribbon framework. И вот здесь фигня. Ribbon убрался, но форма стала инвалидом. Шапка хоть и отображается, но не функциональна, клинтская область (Panel1 Dock=Fill) похоже "наехала на то место где есть шапка" Правда если нажать F10;Стрелка вниз, то меню окна появляется, можно закрыть, минимизировать. Главное Меню не появилось. Ну, прога то сама не сдохла, кнопки на ней нажимаются. Беда только с самим окном. Как восстановить нормальный классический вид? С шапкой и меню? М.б. через API? Есть идеи. P.S. Могу конечно полностью перегружать приложение (при смене режима Ribbon->Классика). Но неужели нельзя без перестарта? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2016, 20:12 |
|
Выгрузка Ribbon Framework динамически с восстановлением формы
|
|||
---|---|---|---|
#18+
Меню конечно восстановить можно например так: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Но проблема в том, что после де-активации Ribbon Framework все контролы рисуются от самого верха формы, перекрывая заголовок формы и меню. Связано скорее всего с реализацией Net-обертки, т.е. в одну сторону грамотно (клиентская область смещается под Ribbon) А в другую сторону автор обертки ничего не реализовал (клиентская область перекрывает шапку) или я чего-то недопонимаю, как отменить хак, который он делает для риббона. И как это исправить, копаться в чужих кодах неохота (хотя странно почему само не восстанавливается). Оптимальный способ чтоб не рушить мозг, видимо предлагать закрыть приложение и запустить снова (без загрузки Ribbon), если уж нужно Main Menu. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2016, 23:02 |
|
Выгрузка Ribbon Framework динамически с восстановлением формы
|
|||
---|---|---|---|
#18+
это связано с хромом формы, нужно его установить по новой наверное ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2016, 23:57 |
|
Выгрузка Ribbon Framework динамически с восстановлением формы
|
|||
---|---|---|---|
#18+
Roman Mejtesэто связано с хромом формы, нужно его установить по новой наверное хром - от слова хромать или что-то английское по-русски написал? то что что-то надо восстановить (что уезжает при добавлении Ribbon-контрола), это я и так понял, только не понимаю что что имел ввиду? Игры с формами (окнами) не так просты, что через API, что через .Net (шаг вправо-влево от "стандартов" -> расстрел) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2016, 01:09 |
|
Выгрузка Ribbon Framework динамически с восстановлением формы
|
|||
---|---|---|---|
#18+
Дмитрий77Roman Mejtesэто связано с хромом формы, нужно его установить по новой наверное хром - от слова хромать или что-то английское по-русски написал? то что что-то надо восстановить (что уезжает при добавлении Ribbon-контрола), это я и так понял, только не понимаю что что имел ввиду? Игры с формами (окнами) не так просты, что через API, что через .Net (шаг вправо-влево от "стандартов" -> расстрел) извини, я ошибся разделом, думал раздел WPF вот ссылка https://msdn.microsoft.com/en-us/library/system.windows.shell.windowchrome(v=vs.110).aspx не знаю, возможно у WF приложения всё так же устроено, в чем сильно сомневаюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2016, 10:40 |
|
Выгрузка Ribbon Framework динамически с восстановлением формы
|
|||
---|---|---|---|
#18+
Roman Mejtes, Нет, речь не о WPF, а о родном Windows Ribbon Framework, под который сделана неплохая обертка под WinForm, ссылки в начале первого поста. Roman Mejtesне знаю, возможно у WF приложения всё так же устроено, в чем сильно сомневаюсь. Нет конечно, WinForm -это в основном родной Win32, на который наложена логика макета этих самых WinForm. Перерисовал картинку. Логика такова. 1)Делаем форму, на нее кидаем Panel1 (Dock=Fill) 2) При инициализации Ribbon, он "добавляется" на форму как "контрол" с (Dock=Top), но при этом координаты области контролов уже считаются очевидно от самой макушки (а не под ней и главным меню как по стандарту) И скорее всего автор контрола делает какой-то трюк. 3) Когда мы риббон убираем (обычно предполагается закрытие формы, но я этого не делаю), то Panel1 опять занимает место "на всю форму", но это место продолжает быть "от самой макушки" (съехала логика макета). Возможно вот этот код (из библиотеки риббон-контрола) "портит", но я не уверен Код: c# 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
М.б. через Win API можно подправить, но не знаю куда копать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2016, 16:55 |
|
Выгрузка Ribbon Framework динамически с восстановлением формы
|
|||
---|---|---|---|
#18+
Клиентскую область формы при желании подвинуть можно через WM_NCCALCSIZE Как-то так в примитиве: Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73.
Но все одно глючит. Под меню какая-то глючная полоска (непрорисованный верхний кусок панели и это Refresh-Update опять же не лечится, хотя с кнопками вроде все OK, картинку приложил ниже). Ну еще восстановление меню через SetMenu имеет свои ньюансы: если уменьшать ширину формы и строка меню займет 2 строчки, то меню наедет на клиентскую область. Т.е. после убирания риббон-контрола макет все одно поломан, лечи не лечи. На 7-ке кстати динамическое Me.Controls.Add(_ribbon) тоже подглючивает (на 10-ке нормально), правда лечится переигрыванием FormWindowState.Normal-> FormWindowState.Minimized ->FormWindowState.Normal Пожалуй пора забить на этот конкретный вопрос. Через перезагрузку формы вполне достаточно. Контрол ( Windows Ribbon for WinForms ) супер (главное полностью оборачивает Native), но мелких глюков хватает. Например когда не все картинки не на всех кнопках добавляются и от чего зависит хз (м.б. уборщик мусора, но вина не моя, проверял) или надписи вовремя не обновляются. Всякими переигрываниями вроде лечится. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2016, 00:27 |
|
|
start [/forum/topic.php?fid=20&fpage=58&tid=1400465]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 18ms |
total: | 178ms |
0 / 0 |