|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
Hi All!!! Не вброс в вентилятор, реальная проблема. Как бы решить её поизящнее... Суть в таком: Есть MDI приложение (ВНИМАНИЕ, MDI) Есть окно градусника (Пусть будет TProgressForm). parent = nil. Owner = фигня всякая разная. и NIL в т.ч. Это окно открывают всякие разные скрипты, как хотят, за которыми само приложение следить не может. Ясно, что такое окно модальным быть не может. Мало того, скрипты каскадно вызывают друг друга, и этих окон градусников на экране более 1-го. ...реализовано пока так: окно не является дочкой MDI MainForm, и дизейблит эту MainForm. Потом, вертают всё взад. Тут ОК. Далее отключил fsStayOnTop... (а то они лезли поверх остальных приложений в системе) Но прописал SetWindowPos(self.Handle, HWND_NOTOPMOST, 0, 0 ,0 ,0 , SWP_NOMOVE or SWP_NOSIZE, SWP_NOACTIVATE) хм... Что бы хотелось? Чтобы они были-таки дочками MainWindow, но кроме самого верхнего из градусников - все были disabled ...Ну, в общем, аналог модальности, но без этого цикла внутри ShowModal, который блокирует выполнение ветки кода, его вызвавшей... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:08 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
Makar4ik, а что мешает при показе очередного градусника дизаблить предыдущий, если таковой имеется? Организуй из них стек и управляй enabled ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:17 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
white_nigger Makar4ik, а что мешает при показе очередного градусника дизаблить предыдущий, если таковой имеется? Организуй из них стек и управляй enabled Много мешает. 1. Если градусник - дочка MainWindow, то MainWindow нельзя. (а дочкой как раз хочется) 2. слово "поизящнее" в топике мешает. почему хочется дочкой: Вендор на D7 прислал библиотеки, а у клиентов - полный зоопарк, и окна устраивают чехарду по Z-order-у Дочка MainWindow, хотя-бы в своей песочнице будет эту чехарду делать, а не глобально по всем окнам у клиента... Вот и хочется, и градусник сделать дочкой, и MainWindow задизейблить, и дочку не задеть. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:21 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
Мысль понятна? ...не-дочка градусник - ведёт себя плохо. ...дочка-градусник - дизейблит и себя в том числе. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:40 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
Makar4ik Мысль понятна? ...не-дочка градусник - ведёт себя плохо. ...дочка-градусник - дизейблит и себя в том числе. ..ну поэтому и хотел ИЗЯЩНЕЕ. Пока так: Все, кроме Я enabled - в список, и их disabled При дестрое - взад. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:46 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
Makar4ik Makar4ik Мысль понятна? ...не-дочка градусник - ведёт себя плохо. ...дочка-градусник - дизейблит и себя в том числе. ..ну поэтому и хотел ИЗЯЩНЕЕ. Пока так: Все, кроме Я enabled - в список, и их disabled При дестрое - взад. ...Получается лишний список... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:49 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
...в общем, в MDI - нельзя MainForm делать disabled А хочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:58 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
Makar4ik ...в общем, в MDI - нельзя MainForm делать disabled А хочется. Шлепни на всю майн форму форму панель под низ, и дизабли ее. А вообще мое ощущение от твоей задачи: ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 19:23 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
rgreatШлепни на всю майн форму форму панель под низ, и дизабли ее. На главную MDI форму вроде как невозможно что-либо шлёпнуть вообще. Дизаблятся там только менюшка и тулбар. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 19:54 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
Без MDI я писал стековую модальность. Т.е. есть набор родительских немодальных форм, от которых порождаются "модальные только для своего стека" дочерние. Можно было переключаться между пирамидками из окон ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 20:32 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
Тогда (D7) это работало. Сейчас - не знаю, и подводные камни наверняка есть Код: pascal 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. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 20:35 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
Makar4ik Мало того, скрипты каскадно вызывают друг друга, и этих окон градусников на экране более 1-го Вот это неправильно. Нужно, чтобы градусник умел обрабатывать иерархические вызовы. То есть внутри него некий стек состояний, и вместо появления нового окна он сохраняет, на чём остановился, и переходит к отображению нового, по завершении - возвращается к сохранённому. Makar4ik Далее отключил fsStayOnTop... (а то они лезли поверх остальных приложений в системе) Но прописал SetWindowPos(self.Handle, HWND_NOTOPMOST, 0, 0 ,0 ,0 , SWP_NOMOVE or SWP_NOSIZE, SWP_NOACTIVATE) Чтобы они были-таки дочками MainWindow, но кроме самого верхнего из градусников - все были disabled Вместо того и другого и третьего нужно выставить PopupParent/PopupMode. Тогда градусник будет всегда перед родителем, не будет мешать другим приложениям, будет псевдомодальным и как вишенка на торте - будет для пользователя более отличим от MDI-ных окон. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 20:55 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov На главную MDI форму вроде как невозможно что-либо шлёпнуть вообще. Насколько я помню - шлёпнуть-то можно, но при этом клиентская область MDI автоматически сокращается до незанятого шлёпнутым пространства. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 22:55 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
softwarer Makar4ik Мало того, скрипты каскадно вызывают друг друга, и этих окон градусников на экране более 1-го Вот это неправильно. Нужно, чтобы градусник умел обрабатывать иерархические вызовы. То есть внутри него некий стек состояний, и вместо появления нового окна он сохраняет, на чём остановился, и переходит к отображению нового, по завершении - возвращается к сохранённому. Makar4ik Далее отключил fsStayOnTop... (а то они лезли поверх остальных приложений в системе) Но прописал SetWindowPos(self.Handle, HWND_NOTOPMOST, 0, 0 ,0 ,0 , SWP_NOMOVE or SWP_NOSIZE, SWP_NOACTIVATE) Чтобы они были-таки дочками MainWindow, но кроме самого верхнего из градусников - все были disabled Вместо того и другого и третьего нужно выставить PopupParent/PopupMode. Тогда градусник будет всегда перед родителем, не будет мешать другим приложениям, будет псевдомодальным и как вишенка на торте - будет для пользователя более отличим от MDI-ных окон. Не, это лишнее. Первый градусник в текущей реализации помнит, что именно он виноват в дизабле MainForm. Нормально отрабатывает. Проблема в том, что градусники - не её дети, и в разных версиях винды между ними - чехарда. И TopMost тоже не сделать, ибо будет вообще жесть. см. выше, SetWindowPos выставлял. и по разному. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 23:34 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov rgreatШлепни на всю майн форму форму панель под низ, и дизабли ее. На главную MDI форму вроде как невозможно что-либо шлёпнуть вообще. Дизаблятся там только менюшка и тулбар. Вот да, скорее всего придётся именно так. Все контролы MainForm, и все дочки, кроме себя. И создавать список, что я задизаблил, чтобы потом вернуть. И вот тогда уже можно флаг HWND_TOPMOST ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 23:39 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
Makar4ik Не, это лишнее. Имеешь полное право собирать грабли :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 23:40 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
softwarer Makar4ik Не, это лишнее. Имеешь полное право собирать грабли :) Бывают проекты, в которых ты не хозяин, но починить надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 23:44 |
|
Немодальное окно со свойствами модального.
|
|||
---|---|---|---|
#18+
...Дело в том, что это LIB модуль. Я там могу код у методов менять, но сам состав методов, или их параметры, или состав у класса - нет. (иначе, ругнётся при сборке, что либа другой версии, а перекомпилить её не судьба, не хватает исходников) ...слава богу, tag лишних у нас полно, можно что угодно записать... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 23:47 |
|
|
start [/forum/topic.php?fid=58&msg=40120794&tid=2036779]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 164ms |
0 / 0 |