|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Добрый день! У меня в приложении приходится отключать кнопку "Свернуть" - если программа запускается с полными правами (командой "Запуск от имени Администратора"). Иначе после минимизации - при клике на кнопку приложения на панели задач она не разворачивается. Если программу запускать с обычными правами - всё работает нормально. Минимизировала ситуацию - в виде простой программки на 2 формы. В первой форме вообще ничего интересного, кроме вызова Form2.ShowModal, во второй код, приведённый ниже. Так вот - если запускать программу обычным способом - всё нормально сворачивается и разворачивается. Если же запускать от имени Администратора - после сворачивания приложения его уже невозможно нормально развернуть. В чём может быть дело? Может, ещё какая-то команда/событие есть, передаваемая форме операционной системой, которую надо обрабатывать для восстановления? Код: 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.
Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 14:38 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
А если выкинуть этот код, то что не работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 15:14 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87 Код: pascal 1. 2. 3. 4. 5. 6. 7.
А если у процедуры WMACTIVATEAPP добавить message WM_ACTIVATEAPP? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 15:43 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
white_nigger А если выкинуть этот код, то что не работает? white_nigger, При сворачивании в форме 2 - надо чтобы и форма 1 автоматом сворачивалась. Если выкинуть код - при сворачивании в форме 2 будет сворачиваться только она, а надо чтобы сворачивалось всё приложение. И разворачивалось тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 16:36 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
goldmi45 Наталья87 Код: pascal 1. 2. 3. 4. 5. 6. 7.
А если у процедуры WMACTIVATEAPP добавить message WM_ACTIVATEAPP? Довольно очевидно - но увы, не помогло. Всё равно не разворачивается. А вообще у формы много событий хороших и разных. Как вообще отловить список всех событий, которые поступают на форму? Можно было бы тогда их в лог записывать и по секундомеру отловить нужное ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 16:37 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87Как вообще отловить список всех событий, которые поступают на форму? Application.OnMessage, но вам не нужны сообщения, достаточно обрабатывать обычный OnMinimize. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 16:53 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Наталья87Как вообще отловить список всех событий, которые поступают на форму? Application.OnMessage, но вам не нужны сообщения, достаточно обрабатывать обычный OnMinimize. Никак не получается. Непонятно вообще, какое событие Проводник отправляет окну при нажатии кнопки на Панели задач ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 17:56 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Задолбало всё, сделала обработку событий главной формы 45056, 45057 - если они приходят не ранее, чем через 2 секунды после минимизации формы- и при этом окно главной формы HIDDEN - будем форму восстанавливать. Костыль работает, но конечно, так некрасиво, хотелось бы сделать по-нормальному ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 18:40 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87Непонятно вообще, какое событие Проводник отправляет окну при нажатии кнопки на Панели задач Смотря какой кнопки. И смотря какому окну. Прочитайте как работает TApplication. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 18:42 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87Костыль работает, но конечно, так некрасиво, хотелось бы сделать по-нормальному ... С вашей-то привычкой к проктостоматологии?.. Не осилите же простую мысль, что сообщения о разворачивании приходят окну приложения, а вовсе не главной форме (хотя на каждом гугловском заборе написаны примеры кода и как сворачивать приложение и как его разворачивать). И даже ещё более простую мысль, что системные функции возвращают ошибки и их следует проверять. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 19:10 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Наталья87Костыль работает, но конечно, так некрасиво, хотелось бы сделать по-нормальному ... С вашей-то привычкой к проктостоматологии?.. Не осилите же простую мысль, что сообщения о разворачивании приходят окну приложения, а вовсе не главной форме (хотя на каждом гугловском заборе написаны примеры кода и как сворачивать приложение и как его разворачивать). И даже ещё более простую мысль, что системные функции возвращают ошибки и их следует проверять. Да, вы правы - всё таки так не работает. Теперь думаю, как заставить обрабатывать текущую верхнюю форму сообщения поток событий. Application.OnMessage ведь можно задать только для одной формы, а не для каждой, а приложение ведь работает таким образом, что формы открываются, закрываются и т. д. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 19:19 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
А, может, всё-таки прекратите маяться дурью и изучите как работает Windows?.. Потому что Дельфийские приложения работают именно так, как вы и хотите, по умолчанию. То есть это Вы сделали в своём приложении что-то сумасшедшее, из-за чего оно не работает так как должно. Опубликуйте воспроизводимый пример простейшего приложения, которое не сворачивается в таскбар и не разворачивается из него. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 20:12 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov А, может, всё-таки прекратите маяться дурью и изучите как работает Windows?.. Не понимаю, башка не рубит совсем и не понятно, где конкретно читать. Но зато кажется, понимаю теперь, что в моём случае (как оно описано выше) - после минимизации приложения - при нажатии на кнопку в панели задач никакие сообщения приложению не отправляются. Проверяю Application.OnMessage, записываю в файл - приходят только сообщения Msg.message=0 Msg.wParam=0 Msg.lParam=0 больше никаких событий не возникает в приложении вообще кроме нулевых. Сколько ни щелкай на зависшее приложение в панели задач ... P. S. По кодам 45056, 45057 это был мой косяк - приложение действительно восстанавливалось - но не благодаря обработке этих кодов - а просто потому что таймер у меня был кинут на Form2, который восстанавливал RESTORE приложение через 2 секунды и это не от кликов зависело ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 20:21 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87Но зато кажется, понимаю теперь, что в моём случае (как оно описано выше) - после минимизации приложения - при нажатии на кнопку в панели задач никакие сообщения приложению не отправляются. Уберите свой код минимизации. Дельфийские приложения сами по себе нормально минимизируются, достаточно им не мешать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 20:24 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Наталья87Но зато кажется, понимаю теперь, что в моём случае (как оно описано выше) - после минимизации приложения - при нажатии на кнопку в панели задач никакие сообщения приложению не отправляются. Уберите свой код минимизации. Дельфийские приложения сами по себе нормально минимизируются, достаточно им не мешать. По умолчанию если ничего не делать - минимизируется только текущая форма, но не все формы приложения. Например, у меня есть Form1, модальная Form2 - стандартное поведение Delphi - минимизировать только Form2, а Form1 останется висеть и толку с такой "минимизации" (это издевательство над пользователем и лучше уж тогда вовсе минимизацию отключить)? Мне нужно - чтобы при нажатии "Свернуть" сворачивались ВСЕ ФОРМЫ приложения. И при нажатии на кнопку в Панели задач - восстанавливались обратно. Казалось бы простое, стандартное действие. На Delphi 7 с этим все время были грабли - похоже что и XE8 в этом плане ничем не лучше ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 20:34 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87Казалось бы простое, стандартное действие. Именно поэтому я и говорю прочитать о работе GUI Windows. Это НЕ простое и НЕ стандартное действие. И тем не менее дельфийские приложения делают именно это при минимизации главной формы. Казалось бы, что может быть проще заглянуть в исходники VCL и посмотреть как это сделано?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 20:47 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Наталья87Казалось бы простое, стандартное действие. Именно поэтому я и говорю прочитать о работе GUI Windows. Это НЕ простое и НЕ стандартное действие. И тем не менее дельфийские приложения делают именно это при минимизации главной формы. Казалось бы, что может быть проще заглянуть в исходники VCL и посмотреть как это сделано?.. Как устроены procedure TApplication.Minimize; procedure TApplication.Restore; в Vcl.Forms не проблема. Проблема даже не в том - как восстановить все окна после минимизации. Нет, проблема в другом - а именно как программа должна понять, что пора вызывать Application.Restore - в какой именно момент. Сообщения-то приложению не приходят при нажатии на кнопку в панели задач (не в трее) ЕСЛИ ПРОГРАММА БЫЛА ЗАПУЩЕНА ЧЕРЕЗ "Запуск от имени Администратора" - потому и не понятно в какой именно момент вызывать Application.Restore. Остается в итоге на данном этапе - определять, что UAC включен и при этом программа запущена с правами администратора - и в этом случае не показывать кнопку "Свернуть", а пользователям пояснить, чтобы не запускали от имени Администратора. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 20:56 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87Нет, проблема в другом - а именно как программа должна понять, что пора вызывать Application.Restore - в какой именно момент. А какая именно проблема-то? Что сложного в том чтобы посмотреть когда восстанавливается свёрнутая главная форма? Всё же именно так и работает: сворачиваете главную форму - сворачиваются все. Щёлкаете по кнопке в панели задач - восстанавливается главная форма и все остальные. Я реально не понимаю Что Вам мешает инициировать сворачивание главной формы самостоятельно? Для начала - по особой кнопке - чтобы Ваш дурной обработчик OnMinimize не мешался. И если оно будет работать - конкретно спрашивать как сделать чтобы Ваш обработчик OnMinimize не мешался. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 21:09 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Что сложного в том чтобы посмотреть когда восстанавливается свёрнутая главная форма? Всё же именно так и работает: сворачиваете главную форму - сворачиваются все. В старых дельфах было не так. Во второй-пятой точно надо было править это руками. Когда это стало нормальным - не помню. P.S. Точнее - с главной формой точно не помню. Помню, что когда сворачивалась модальная форма - она одна, как дура, и сворачивалась, а остальное приложение оставалось недоступным красоваться на экране. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 22:05 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Что сложного в том чтобы посмотреть когда восстанавливается свёрнутая главная форма? Всё же именно так и работает: сворачиваете главную форму - сворачиваются все. Непонятно - где именно смотреть. авторP.S. Точнее - с главной формой точно не помню. Помню, что когда сворачивалась модальная форма - она одна, как дура, и сворачивалась, а остальное приложение оставалось недоступным красоваться на экране. Кажется, Вы меня поняли. Но неужели на XE8 (2015 год все же) такое поведение нормально? Столько лет прошло после Delphi 7 а воз и ныне там? Надо на XE10 как-нибудь попробовать. А если не получится разобраться - тогда лучше просто юзерам запретить сворачивать форму - уж лучше без такой функции, чем "как дура, одна модальная форма сворачивается" или все приложение висит ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 22:35 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
softwarer Dimitry Sibiryakov Что сложного в том чтобы посмотреть когда восстанавливается свёрнутая главная форма? Всё же именно так и работает: сворачиваете главную форму - сворачиваются все. В старых дельфах было не так. Во второй-пятой точно надо было править это руками. Когда это стало нормальным - не помню. P.S. Точнее - с главной формой точно не помню. Помню, что когда сворачивалась модальная форма - она одна, как дура, и сворачивалась, а остальное приложение оставалось недоступным красоваться на экране. Короче, виновата все-таки XE-8. Очень в это не хотелось верить - после Delphi 7 прошло 15 лет - несколько Windows-ов успело выйти, а такая фигня осталась. Но как ни крути, на XE10 все работает как часы и даже если от имени Админа запускать. Так что или переходить на XE10 или городить костыли и рыться в VCL, пытаясь там что-то найти. В общем, убираю для юзеров кнопку "Свернуть" (если программа запущена от имени Админа) - чтобы возможно, потом (в светлом будущем с XE-10) ее вернуть. Костыли городить не буду, есть чем другим заняться. Явно не для того на XE-8 с D7 переходила не ради того, чтобы городить костыли. Тему можно закрывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 22:45 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
softwarerПомню, что когда сворачивалась модальная форма - она одна, как дура, и сворачивалась, а остальное приложение оставалось недоступным красоваться на экране. Да, это сворачивание вторичных окон. Они по умолчанию действительно сворачивались в мелкие иконки над таскбаром. Но я говорю именно о сворачивании главной формы, который совсем другой колёр. PS: А аффтарше всё это говорили ещё год назад в абсолютно аналогичном по степени бредовости топике. Но она и тогда стояла на своём и пыталась прогнуть под себя окружающею реальность. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 23:10 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87Непонятно - где именно смотреть. В исходниках VCL. Папка Sources. Конкретно - Forms.pas. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 23:18 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Наталья87Казалось бы простое, стандартное действие. Именно поэтому я и говорю прочитать о работе GUI Windows. Это НЕ простое и НЕ стандартное действие. И тем не менее дельфийские приложения делают именно это при минимизации главной формы. Казалось бы, что может быть проще заглянуть в исходники VCL и посмотреть как это сделано?..Она хочет, чтобы при сворачивании модальной формы свернулось бы и главное окно, а при восстановлении - чтобы развернулось и всё стало хорошо)) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 23:28 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87 Остается в итоге на данном этапе - определять, что UAC включен и при этом программа запущена с правами администратора - и в этом случае не показывать кнопку "Свернуть", а пользователям пояснить, чтобы не запускали от имени Администратора. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 23:29 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
YuRockОна хочет, чтобы при сворачивании модальной формы свернулось бы и главное окно, а при восстановлении - чтобы развернулось и всё стало хорошо)) Это и ежу понятно. Непонятно почему в первом посте описан такой странный способ этого добиться. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 23:31 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Прикольно. Это что-то в Windows 10 поменялось, действительно реакция на клики по кнопкам в панели задач теперь работает через какую-то прослойку (не утверждаю, но по наблюдению так). Shift+Клик правой кнопкой - мыши работает по старому и сообщение WM_ACTIVATE доходит до формы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 00:12 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Кажется, нашёл решение... Фикус в том, что ShowModal делает DisableTaskWindows - всем формам, кроме текущей модальной, посылается EnableWindow(, False). Модальная (обычно) не имеет кнопки в панели задач, а так форма, которая в панели - это, как правило, главная форма и она задизейблена. Раньше задизейбленные окна получали WM_Activate, а теперь - нет (у меня Windows 10 актуальной версии, обновляется автомтом). Решение в том, что перед сворачиванием модального окна нужно главной форме (и всем тем, которые рисуют кнопку в панели задач) сказать EnableWindow(, True), а при разворачивании - обратно Enable(False). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 00:34 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
delphinotes Кажется, нашёл решение... Фикус в том, что ShowModal делает DisableTaskWindows - всем формам, кроме текущей модальной, посылается EnableWindow(, False). Модальная (обычно) не имеет кнопки в панели задач, а так форма, которая в панели - это, как правило, главная форма и она задизейблена. Раньше задизейбленные окна получали WM_Activate, а теперь - нет (у меня Windows 10 актуальной версии, обновляется автомтом). Решение в том, что перед сворачиванием модального окна нужно главной форме (и всем тем, которые рисуют кнопку в панели задач) сказать EnableWindow(, True), а при разворачивании - обратно Enable(False). Да вы спец! Завелась! Пример кода (требуется причесать и возможно, поставить еще какие ограничители, чтобы излишне не сработал) - но на вопрос в теме ответ получен. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 01:31 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Да я на этом собаку съел. Пофиксил в своей базовой форме (у меня все формы наследуются от базовой): https://github.com/delphinotes/BaseForms/blob/master/BaseForms.pas ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 01:38 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
delphinotes Да я на этом собаку съел. Пофиксил в своей базовой форме (у меня все формы наследуются от базовой): https://github.com/delphinotes/BaseForms/blob/master/BaseForms.pas Зачем такой огромный модуль если только 1 проблему описанную в топике надо было решить? Или ради этой опции не надо тянуть в проект весь модуль? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 01:57 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Там не одна проблема решается. Если не лень - почитайте на досуге (снизу вверх): http://www.delphinotes.ru/search/label/BaseForms Вы можете выдернуть из модуля только то, что вам нужно. Единственное на что обратить внимание - там есть ряд переменных (которые на букву G начинаются), которые по смыслу глобальные (ну т.е. когда форм много, и на панели задач отображается не только главная но и ещё некоторые, то управление сворачивания/разворачивания должно идти через отдельный кусок кода, не привязанный к модулю конкретной формы). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 02:02 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87 Казалось бы простое, стандартное действие. Да казалось бы. Но вот я открываю офисную программу от MS и вызываю диалог записи файла. И в нём "почему-то" нет кнопки минимизации! Так может оно и не очень стандартное или совсем нестандартное? Если подумать, то интуитивно понятно, что если ваше приложение вызвало модальный диалог, то оно требует от пользователя принять решение о каких-то действиях сегодня и сейчас! Зачем тогда иметь возможность его минимизировать? И диалог и приложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 02:24 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
northener Наталья87 Казалось бы простое, стандартное действие. Да казалось бы. Но вот я открываю офисную программу от MS и вызываю диалог записи файла. И в нём "почему-то" нет кнопки минимизации! Так может оно и не очень стандартное или совсем нестандартное? Если подумать, то интуитивно понятно, что если ваше приложение вызвало модальный диалог, то оно требует от пользователя принять решение о каких-то действиях сегодня и сейчас! Зачем тогда иметь возможность его минимизировать? И диалог и приложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 03:06 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
YuRock Естественно, модальные окна - это диалоги Далеко не всегда. Мне сразу вспоминается модальное окно, в котором размещался договор ДМС - со всеми подробностями, тот, который заключает организация для массового страхования своих сотрудников. 24, кажется, закладки в PageControl-е, каждая густо усыпана данными, вводимыми различными специалистами, немало гридов, с которых вызываются вторичные окна. Такой себе диалогик. Почему оно было модальным? А фиг его знает, если честно. Так было в требованиях, мы сделали. Видимо, заказчик так захотел. Если точнее, 24 закладки изначально были 24-мя разными кнопками, с которых вызывались разные формы - но потом заказчик захотел, чтобы это были 24 закладки в одной мегаформе. Мы сделали. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 04:59 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
northener Наталья87 Казалось бы простое, стандартное действие. Да казалось бы. Но вот я открываю офисную программу от MS и вызываю диалог записи файла. И в нём "почему-то" нет кнопки минимизации! Так может оно и не очень стандартное или совсем нестандартное? Если подумать, то интуитивно понятно, что если ваше приложение вызвало модальный диалог, то оно требует от пользователя принять решение о каких-то действиях сегодня и сейчас! Зачем тогда иметь возможность его минимизировать? И диалог и приложение. И да и нет. С одной стороны - действие от пользователя ожидается, да. С другой стороны - ожидаться может и час и два и почему в это время пользователь не имеет права отдохнуть и выпить чаю/почитать браузер, например. Windows же позиционируется как многозадачная и многооконная операционная система, потому такое поведение программы представляется логичным. В 1С 7.7 - скажем, все окна кроме главного в какой-то мере ожидают действий пользователя - так и что теперь - не отдыхать и окна не переключать? Или не пользоваться ShowModal (а изобретать свои велосипеды) чтобы небыло таких проблем. Слава Богу решение есть хоть и костыльное. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 10:54 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
delphinotes комментарии на русском в вашем коде на github побились, невозможно прочесть. А так с интересом посмотрел)) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 12:30 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87Или не пользоваться ShowModal Да, именно так. Чем вас обычный Show не устраивает? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 13:29 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Наталья87Или не пользоваться ShowModal Да, именно так. Чем вас обычный Show не устраивает? Тем, что после действий в форме по ShowModal программа должна вернуться строго в предыдущую форму. Данные в предыдущей форме должны обновиться после закрытия модальной, состояние предыдущей формы не должно меняться до закрытия модальной. Но при этом незачем пользователю запрещать программу сворачивать, т. к. 99% времени работы пользователь находится в той или иной модальной форме. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 14:17 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
delphinotes Кажется, нашёл решение... Фикус в том, что ShowModal делает DisableTaskWindows - всем формам, кроме текущей модальной, посылается EnableWindow(, False). Модальная (обычно) не имеет кнопки в панели задач, а так форма, которая в панели - это, как правило, главная форма и она задизейблена. Раньше задизейбленные окна получали WM_Activate, а теперь - нет (у меня Windows 10 актуальной версии, обновляется автомтом). Решение в том, что перед сворачиванием модального окна нужно главной форме (и всем тем, которые рисуют кнопку в панели задач) сказать EnableWindow(, True), а при разворачивании - обратно Enable(False). Есть конечно и минус Вашего решения. В том, что если делать EnableWindow(, True) - то при сворачивании программа показывается не только в панели задач - но еще остается сама форма на экране (в нижнем левом углу) в свернутом виде. Но неудобств это сильных не доставляет - склоняюсь к тому, что так правильно, так как в Delphi XE10 без Вашего кода все происходит точно также. В чем-то даже плюсы такого поведения программы есть. К тому же - если программа запущена не от имени Администратора - никто не мешает делать по-старому для привиредливых пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 14:20 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья8799% времени работы пользователь находится в той или иной модальной форме. Да, в наше время трудно найти грамотного UI/UX архитектора... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 14:23 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Наталья8799% времени работы пользователь находится в той или иной модальной форме. Да, в наше время трудно найти грамотного UI/UX архитектора... Вы еще больше ужаснетесь если узнаете, что главная форма программы - это форма авторизации перед запуском программы (которую по хорошему надо временно создавать в DPR-файле и уничтожать после авторизации), а вторая модальная форма в 99% случаях не открыта на экране, вся основная работа происходит в третьей и далее модальной форме. Конечно, сейчас не стала бы так делать. Но переделывать себе дороже выйдет - куча глюков вылезет, так как в этой первой Form1 (которая для авторизации) куча кода, связанного с остальной программой. К тому же если приложение делать как MDI - там будут свои заморочки. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 14:27 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
softwarer YuRock Естественно, модальные окна - это диалоги Далеко не всегда. Мне сразу вспоминается модальное окно, в котором размещался договор ДМС - со всеми подробностями, тот, который заключает организация для массового страхования своих сотрудников. 24, кажется, закладки в PageControl-е, каждая густо усыпана данными, вводимыми различными специалистами, немало гридов, с которых вызываются вторичные окна. Такой себе диалогик. Почему оно было модальным? А фиг его знает, если честно. Так было в требованиях, мы сделали. Видимо, заказчик так захотел. Если точнее, 24 закладки изначально были 24-мя разными кнопками, с которых вызывались разные формы - но потом заказчик захотел, чтобы это были 24 закладки в одной мегаформе. Мы сделали. Но бывают, согласен, не диалоги. Редактирование справочников бывает удобно сделать модальным, чтобы после редактирования знать, нажали сохранить или отмена. Но это - тоже своего рода диалоги, их тоже сворачивать не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 15:14 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
YuRock Но это - тоже своего рода диалоги, их тоже сворачивать не надо. "Сворачивать не надо" две категории окон. Либо очень мелкое (такое, что нет проблем задвинуть его в угол), либо не содержащее никакой заметной нововведённой информации (такое, что его легко закрыть и потом переоткрыть). Всё, что не соответствует этим условиям - сворачивать просто необходимо. В случае модальных - вместе с приложением. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 15:34 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
[quot YuRock#22391947] softwarer пропущено... Но бывают, согласен, не диалоги. Редактирование справочников бывает удобно сделать модальным, чтобы после редактирования знать, нажали сохранить или отмена. Но это - тоже своего рода диалоги, их тоже сворачивать не надо. Именно что сворачивать надо. Чтобы пользователь мог в любой момент переключиться на другую задачу, а не был вынужден дозабивать данные прежде чем программа позволит себя свернуть. Из-за неадекватной работы с окнами Windows некоторых программ приходится для них использовать VirtualBox чтобы не мешались. Форма может быть не только для справочников - но например, для документов еще. Не сворачивать можно разве что окна выбора файла или простые диалоги ShowMessage, хотя в идеале и это тоже должно позволять себя свернуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 15:50 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
softwarerВсё, что не соответствует этим условиям - сворачивать просто необходимо. Чтобы посмотреть и скопировать информацию в это окно из окна другого приложения? Обычно хватает Alt-Tab. Единственное исключение - когда надо обнажить кусок рабочего стола, на котором ярлыки лежат. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 15:54 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Чтобы посмотреть и скопировать информацию в это окно из окна другого приложения? Чтобы отставить в сторону это приложение и заняться другим делом. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 15:56 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov softwarerВсё, что не соответствует этим условиям - сворачивать просто необходимо. Чтобы посмотреть и скопировать информацию в это окно из окна другого приложения? Обычно хватает Alt-Tab. Единственное исключение - когда надо обнажить кусок рабочего стола, на котором ярлыки лежат. Чтобы например, можно было без всяких AltDesk - в любой момент свернуть приложение и например, запускать текстовые и вордовские файлы с рабочего стола и при этом чтобы приложение не путалось под ногами и вело при сворачивании себя как нормальное приложение вроде Opera, Google Chrome и т. д. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 15:57 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87вело при сворачивании себя как нормальное приложение вроде Opera, Google Chrome и т. д. А обращали ли Вы внимание, что ни Опера, ни Хром никогда не открывают модальных окон? И что при сворачивании одного их окна - оно сворачивается одно, остальные остаются развёрнутыми?.. Про то, что "текстовые и вордовские файлы на рабочем столе" - плохая привычка со многих точек зрения я, пожалуй, говорить не буду, ибо горбатого... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 16:09 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 16:44 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
softwarer Dimitry Sibiryakov Чтобы посмотреть и скопировать информацию в это окно из окна другого приложения? Чтобы отставить в сторону это приложение и заняться другим делом. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 16:47 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Наталья87 Не сворачивать можно разве что окна выбора файла или простые диалоги ShowMessage, хотя в идеале и это тоже должно позволять себя свернуть. Если б пришлось работать с таким ПО - проклинал бы фантазии программиста по-доброму :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 16:52 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
YuRock Наталья87 Не сворачивать можно разве что окна выбора файла или простые диалоги ShowMessage, хотя в идеале и это тоже должно позволять себя свернуть. Если б пришлось работать с таким ПО - проклинал бы фантазии программиста по-доброму :) А какой смысл сворачивать не всё приложение если другие формы всё равно остаются недоступными (раз уж вся логика приложения на базе ShowModal)? Какой смысл сворачивать только одну, самую верхнюю форму? Тогда уж единственным полезным действием, которое можно назначить на кнопку "Свернуть" - как раз и остаётся свернуть всё приложение. К тому же - если при нажатии "Свернуть" сворачивать только одну форму - как тогда свернуть всё приложение? В общем, как я вижу, при построении приложения в стиле ShowModal как раз сворачивание всего приложения при нажатии "Свернуть" только так и имеет смысл ... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 00:47 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
Попробовала все ShowModal поменять на Show созданием предка. Программа с пятого раза таки запустилась (пришлось правда отказаться от Destroy и Free после ShowModal, накапливая утечки памяти) но с таким диким количеством глюков что пожалуй от этой идеи откажусь ... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 01:32 |
|
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
|
|||
---|---|---|---|
#18+
delphinotes Да я на этом собаку съел. Пофиксил в своей базовой форме (у меня все формы наследуются от базовой): https://github.com/delphinotes/BaseForms/blob/master/BaseForms.pas Единственное что могу сказать - проверив всё на практике. На Windows 2000/XP Ваш способ лучше не использовать, т. к. приложение в этом случае перестаёт сворачиваться вообще (но там можно использовать обычный способ, так как ситуации, когда есть UAC и при запуск от имени Администратора не встречается). На Windows 7, 10 и других работает замечательно. Полагаю, Ваш способ надо использовать если функция GetWindowsMajorVersion больше или равна 6. P. S. Системы ниже Windows XP не проверяла и не вижу смысла в них разбираться вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2021, 11:00 |
|
|
start [/forum/topic.php?all=1&fid=58&tid=2036903]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
others: | 229ms |
total: | 410ms |
0 / 0 |