powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
25 сообщений из 55, страница 2 из 3
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109117
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockОна хочет, чтобы при сворачивании модальной формы свернулось бы и главное окно,
а при восстановлении - чтобы развернулось и всё стало хорошо))

Это и ежу понятно. Непонятно почему в первом посте описан такой странный способ
этого добиться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109120
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прикольно.
Это что-то в Windows 10 поменялось, действительно реакция на клики по кнопкам в панели задач теперь работает через какую-то прослойку (не утверждаю, но по наблюдению так).

Shift+Клик правой кнопкой - мыши работает по старому и сообщение WM_ACTIVATE доходит до формы.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109122
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется, нашёл решение...
Фикус в том, что ShowModal делает DisableTaskWindows - всем формам, кроме текущей модальной, посылается EnableWindow(, False).
Модальная (обычно) не имеет кнопки в панели задач, а так форма, которая в панели - это, как правило, главная форма и она задизейблена.
Раньше задизейбленные окна получали WM_Activate, а теперь - нет (у меня Windows 10 актуальной версии, обновляется автомтом).
Решение в том, что перед сворачиванием модального окна нужно главной форме (и всем тем, которые рисуют кнопку в панели задач) сказать EnableWindow(, True), а при разворачивании - обратно Enable(False).
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109130
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
UNIT Unit3;
INTERFACE
USES
   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
   Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
   TForm3 = class(TForm)
   private
      procedure WMSYSCOMMAND(var Msg: TWMSYSCOMMAND); message WM_SYSCOMMAND;
      procedure WMACTIVATEAPP(var Msg: TWMACTIVATEAPP); message WM_ACTIVATEAPP;
   public
   end;
var
  Form3: TForm3;

IMPLEMENTATION
{$R *.dfm}
uses Unit1;

procedure TForm3.WMSYSCOMMAND(var Msg: TWMSYSCOMMAND);
begin
   if (Application.MainForm.Handle>0) and (Msg.CmdType=SC_MINIMIZE) then begin
      ShowWindow(Form1.Handle, SW_SHOW);
      ShowWindow(Application.MainForm.Handle, SW_MINIMIZE);
   end;
   inherited;
end;

procedure TForm3.WMACTIVATEAPP(var Msg: TWMACTIVATEAPP);
begin
   if IsIconic(Application.MainForm.Handle) then begin
      ShowWindow(Form1.Handle, SW_HIDE);
      ShowWindow(Application.MainForm.Handle, SW_RESTORE);
   end;
   inherited;
end;

END.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109133
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я на этом собаку съел.

Пофиксил в своей базовой форме (у меня все формы наследуются от базовой):
https://github.com/delphinotes/BaseForms/blob/master/BaseForms.pas
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109134
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delphinotes
Да я на этом собаку съел.

Пофиксил в своей базовой форме (у меня все формы наследуются от базовой):
https://github.com/delphinotes/BaseForms/blob/master/BaseForms.pas


Зачем такой огромный модуль если только 1 проблему описанную в топике надо было решить? Или ради этой опции не надо тянуть в проект весь модуль?
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109135
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там не одна проблема решается. Если не лень - почитайте на досуге (снизу вверх):
http://www.delphinotes.ru/search/label/BaseForms

Вы можете выдернуть из модуля только то, что вам нужно. Единственное на что обратить внимание - там есть ряд переменных (которые на букву G начинаются), которые по смыслу глобальные (ну т.е. когда форм много, и на панели задач отображается не только главная но и ещё некоторые, то управление сворачивания/разворачивания должно идти через отдельный кусок кода, не привязанный к модулю конкретной формы).
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109137
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наталья87
Казалось бы простое, стандартное действие.

Да казалось бы. Но вот я открываю офисную программу от MS и вызываю диалог записи файла. И в нём "почему-то" нет кнопки минимизации!
Так может оно и не очень стандартное или совсем нестандартное?
Если подумать, то интуитивно понятно, что если ваше приложение вызвало модальный диалог, то оно требует от пользователя принять решение о каких-то действиях сегодня и сейчас! Зачем тогда иметь возможность его минимизировать? И диалог и приложение.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109140
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
northener
Наталья87
Казалось бы простое, стандартное действие.

Да казалось бы. Но вот я открываю офисную программу от MS и вызываю диалог записи файла. И в нём "почему-то" нет кнопки минимизации!
Так может оно и не очень стандартное или совсем нестандартное?
Если подумать, то интуитивно понятно, что если ваше приложение вызвало модальный диалог, то оно требует от пользователя принять решение о каких-то действиях сегодня и сейчас! Зачем тогда иметь возможность его минимизировать? И диалог и приложение.
Естественно, модальные окна - это диалоги, и сворачивать их мне кажется противоестественным.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109143
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Естественно, модальные окна - это диалоги

Далеко не всегда.

Мне сразу вспоминается модальное окно, в котором размещался договор ДМС - со всеми подробностями, тот, который заключает организация для массового страхования своих сотрудников. 24, кажется, закладки в PageControl-е, каждая густо усыпана данными, вводимыми различными специалистами, немало гридов, с которых вызываются вторичные окна. Такой себе диалогик.

Почему оно было модальным? А фиг его знает, если честно. Так было в требованиях, мы сделали. Видимо, заказчик так захотел. Если точнее, 24 закладки изначально были 24-мя разными кнопками, с которых вызывались разные формы - но потом заказчик захотел, чтобы это были 24 закладки в одной мегаформе. Мы сделали.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109166
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
northener
Наталья87
Казалось бы простое, стандартное действие.

Да казалось бы. Но вот я открываю офисную программу от MS и вызываю диалог записи файла. И в нём "почему-то" нет кнопки минимизации!
Так может оно и не очень стандартное или совсем нестандартное?
Если подумать, то интуитивно понятно, что если ваше приложение вызвало модальный диалог, то оно требует от пользователя принять решение о каких-то действиях сегодня и сейчас! Зачем тогда иметь возможность его минимизировать? И диалог и приложение.


И да и нет. С одной стороны - действие от пользователя ожидается, да.

С другой стороны - ожидаться может и час и два и почему в это время пользователь не имеет права отдохнуть и выпить чаю/почитать браузер, например.

Windows же позиционируется как многозадачная и многооконная операционная система, потому такое поведение программы представляется логичным. В 1С 7.7 - скажем, все окна кроме главного в какой-то мере ожидают действий пользователя - так и что теперь - не отдыхать и окна не переключать? Или не пользоваться ShowModal (а изобретать свои велосипеды) чтобы небыло таких проблем. Слава Богу решение есть хоть и костыльное.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109190
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphinotes комментарии на русском в вашем коде на github побились, невозможно прочесть. А так с интересом посмотрел))
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109197
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Или не пользоваться ShowModal

Да, именно так. Чем вас обычный Show не устраивает?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109204
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Наталья87Или не пользоваться ShowModal

Да, именно так. Чем вас обычный Show не устраивает?


Тем, что после действий в форме по ShowModal программа должна вернуться строго в предыдущую форму. Данные в предыдущей форме должны обновиться после закрытия модальной, состояние предыдущей формы не должно меняться до закрытия модальной. Но при этом незачем пользователю запрещать программу сворачивать, т. к. 99% времени работы пользователь находится в той или иной модальной форме.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109206
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
delphinotes
Кажется, нашёл решение...
Фикус в том, что ShowModal делает DisableTaskWindows - всем формам, кроме текущей модальной, посылается EnableWindow(, False).
Модальная (обычно) не имеет кнопки в панели задач, а так форма, которая в панели - это, как правило, главная форма и она задизейблена.
Раньше задизейбленные окна получали WM_Activate, а теперь - нет (у меня Windows 10 актуальной версии, обновляется автомтом).
Решение в том, что перед сворачиванием модального окна нужно главной форме (и всем тем, которые рисуют кнопку в панели задач) сказать EnableWindow(, True), а при разворачивании - обратно Enable(False).


Есть конечно и минус Вашего решения. В том, что если делать

EnableWindow(, True)

- то при сворачивании программа показывается не только в панели задач - но еще остается сама форма на экране (в нижнем левом углу) в свернутом виде. Но неудобств это сильных не доставляет - склоняюсь к тому, что так правильно, так как в Delphi XE10 без Вашего кода все происходит точно также. В чем-то даже плюсы такого поведения программы есть. К тому же - если программа запущена не от имени Администратора - никто не мешает делать по-старому для привиредливых пользователей.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109208
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья8799% времени работы пользователь находится в той или иной модальной форме.

Да, в наше время трудно найти грамотного UI/UX архитектора...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109209
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Наталья8799% времени работы пользователь находится в той или иной модальной форме.

Да, в наше время трудно найти грамотного UI/UX архитектора...


Вы еще больше ужаснетесь если узнаете, что главная форма программы - это форма авторизации перед запуском программы (которую по хорошему надо временно создавать в DPR-файле и уничтожать после авторизации), а вторая модальная форма в 99% случаях не открыта на экране, вся основная работа происходит в третьей и далее модальной форме. Конечно, сейчас не стала бы так делать. Но переделывать себе дороже выйдет - куча глюков вылезет, так как в этой первой Form1 (которая для авторизации) куча кода, связанного с остальной программой. К тому же если приложение делать как MDI - там будут свои заморочки.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109223
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
YuRock
Естественно, модальные окна - это диалоги

Далеко не всегда.

Мне сразу вспоминается модальное окно, в котором размещался договор ДМС - со всеми подробностями, тот, который заключает организация для массового страхования своих сотрудников. 24, кажется, закладки в PageControl-е, каждая густо усыпана данными, вводимыми различными специалистами, немало гридов, с которых вызываются вторичные окна. Такой себе диалогик.

Почему оно было модальным? А фиг его знает, если честно. Так было в требованиях, мы сделали. Видимо, заказчик так захотел. Если точнее, 24 закладки изначально были 24-мя разными кнопками, с которых вызывались разные формы - но потом заказчик захотел, чтобы это были 24 закладки в одной мегаформе. Мы сделали.
Делать такие окна модальными - ужас, конечно.
Но бывают, согласен, не диалоги. Редактирование справочников бывает удобно сделать модальным, чтобы после редактирования знать, нажали сохранить или отмена.
Но это - тоже своего рода диалоги, их тоже сворачивать не надо.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109231
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Но это - тоже своего рода диалоги, их тоже сворачивать не надо.

"Сворачивать не надо" две категории окон. Либо очень мелкое (такое, что нет проблем задвинуть его в угол), либо не содержащее никакой заметной нововведённой информации (такое, что его легко закрыть и потом переоткрыть). Всё, что не соответствует этим условиям - сворачивать просто необходимо. В случае модальных - вместе с приложением.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109236
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot YuRock#22391947]
softwarer
пропущено...
Но бывают, согласен, не диалоги. Редактирование справочников бывает удобно сделать модальным, чтобы после редактирования знать, нажали сохранить или отмена.
Но это - тоже своего рода диалоги, их тоже сворачивать не надо.


Именно что сворачивать надо. Чтобы пользователь мог в любой момент переключиться на другую задачу, а не был вынужден дозабивать данные прежде чем программа позволит себя свернуть. Из-за неадекватной работы с окнами Windows некоторых программ приходится для них использовать VirtualBox чтобы не мешались.

Форма может быть не только для справочников - но например, для документов еще.

Не сворачивать можно разве что окна выбора файла или простые диалоги ShowMessage, хотя в идеале и это тоже должно позволять себя свернуть.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109240
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВсё, что не соответствует этим условиям - сворачивать просто необходимо.

Чтобы посмотреть и скопировать информацию в это окно из окна другого приложения?
Обычно хватает Alt-Tab. Единственное исключение - когда надо обнажить кусок
рабочего стола, на котором ярлыки лежат.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109241
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Чтобы посмотреть и скопировать информацию в это окно из окна другого приложения?

Чтобы отставить в сторону это приложение и заняться другим делом.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109242
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

softwarerВсё, что не соответствует этим условиям - сворачивать просто необходимо.

Чтобы посмотреть и скопировать информацию в это окно из окна другого приложения?
Обычно хватает Alt-Tab. Единственное исключение - когда надо обнажить кусок
рабочего стола, на котором ярлыки лежат.


Чтобы например, можно было без всяких AltDesk - в любой момент свернуть приложение и например, запускать текстовые и вордовские файлы с рабочего стола и при этом чтобы приложение не путалось под ногами и вело при сворачивании себя как нормальное приложение вроде Opera, Google Chrome и т. д.
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109244
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87вело при сворачивании себя как нормальное приложение вроде Opera, Google Chrome
и т. д.

А обращали ли Вы внимание, что ни Опера, ни Хром никогда не открывают модальных
окон?
И что при сворачивании одного их окна - оно сворачивается одно, остальные
остаются развёрнутыми?..

Про то, что "текстовые и вордовские файлы на рабочем столе" - плохая привычка со
многих точек зрения я, пожалуй, говорить не буду, ибо горбатого...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
    #40109260
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не разворачивается приложение-если его запустить от имени Администратора, а потом свернуть
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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