powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
22 сообщений из 22, страница 1 из 1
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069239
DmitrySergeev79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Компилирую программу на Delphi XE8.

Программа совершенно простейшая, никаких ухищрений. Три формы Form1, Form2, Form3. При запуске программы открывается Form1, по нажатию Button на Form1 через ShowModal открывается Form2, при нажатии Button на Form2 открывается Form3. Таким образом, открыты три формы, активна Form3, Form1 и Form2 неактивны, так как при открытии было использовано ShowModal. Это всё нормально.

Далее нажимаем кнопку "Свернуть" (_) в заголовке Form3, сворачиваются все три формы. При клике на панели задач разворачиваются все три формы. Всё в порядке. Но так происходит только если запускать программу двойным кликом в Проводнике, либо запускать с помощью F9 из среды Delphi.

Если же запустить программу с помощью ярлыка - формы точно также открываются модально как полагается - но при нажатии "Свернуть" (_) в заголовке Form3 сворачивается только она одна, Form1 и Form2 продолжают висеть на экране. Таким образом, кнопка "Свернуть" полностью теряет свой смысл, так как Form1 и Form2 продолжают висеть на экране неактивные (мешая пользоваться другими приложениями), сворачивается только Form3.

Что я делаю не так? Чем отличается запуск программы с помощью ярлыка и запуск двойным кликом из Проводника? Или это глюк Delphi XE8?
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069240
DmitrySergeev79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Впрочем, нет. Даже при запуске из Проводника такое же неправильно поведение. Сворачивается только Form3 - просто Form1 и Form2 были спрятаны за окном Проводника и это я не заметил - но если закрыть окно Проводника, откуда запуск и перейти на рабочий стол, формы также висят. Суть проблемы в картинка (первое окно - открыты последовательно три формы), второе - нажал "Свернуть" в Form3, только она и свернулась (а надо чтобы сворачивались все как в нормальной программе - смысла сворачивать одну никакого нет).
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069241
DmitrySergeev79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069242
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069329
DmitrySergeev79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GunSmoker


Увы, но нет. Что только не пробовал и ваши статьи читал про окна. Всё равно - при нажатии кнопки "Свернуть" в модальном окне сворачивается только оно, остальные окна остаются неизменными и не сворачиваются (странно, зачем они нужны - и почему не сворачиваются - всё равно с ними пользователь ничего не может сделать).

Опцию Application.MainFormOnTaskbar := True; тоже пробовал - не помогает - что при включении что при отключении такое же поведение.
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069336
DmitrySergeev79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели в довольно-таки современной среде Delphi XE8 такие простые вещи не работают из коробки как нужно? И придется городить огороды (для каждой формы) вроде того, что ниже? С Delphi 7 уходил в том числе ради того, чтобы избежать велосипедов и огородов ...

Код: 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 frmuModal;

interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TfrmModal = class(TForm)
  private
    procedure WMSYSCOMMAND(var Msg: TWMSYSCOMMAND); message WM_SYSCOMMAND;
    procedure WMACTIVATEAPP(var Msg: TWMACTIVATEAPP); message WM_ACTIVATEAPP;
  end;

var
  frmModal: TfrmModal;

implementation

{$R *.DFM}
procedure TfrmModal.WMACTIVATEAPP(var Msg: TWMACTIVATEAPP);
 begin
   //Если приложение в свернутом состоянии,
   //то разворачиваем в нормальное
   if IsIconic(Application.Handle) then
     ShowWindow(Application.Handle, SW_RESTORE);
   inherited;
 end;

procedure TfrmModal.WMSYSCOMMAND(var Msg: TWMSYSCOMMAND);
 begin
   //Если сообщение "свернуть",
   // то сворачиваем главную форму приложения
   if Msg.CmdType = SC_MINIMIZE then
    ShowWindow(Application.Handle, SW_MINIMIZE)
   else
     inherited;
 end;
end.
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069373
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmitrySergeev79,

Из формы 1 открыли форму 2.

Сворачиваем форму 2.

Что должна делать форма 1? Сворачиваться?

А может тот, кто свернул форму 2 просто захотел посмотреть на форму 1, а она взяла и свернулась? Однозначно виновата XE8.
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069376
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO & AFAIK

Читать про SDI и MDI интерфейс для Windows приложений
Читать про стили окон в Windows
Читать, как это нормально делается в Delphi

Не специалист по Depli, но в гугле полно информации, первая же попавшаяся ссылка:

https://delphisources.ru/pages/faq/base/mdi_app_development.html
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069397
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТС нужно понять, что при сворачивании, разворачивании или закрытии текущего окна приложения, не зависимо от того модальное оно или нет, другие открытые окна этого приложения НЕ обязаны автоматически сворачиваться, разворачиваться или закрываться.

И в этом поведении окон приложения не нужно винить используемый инструмент, а тем более менять его. На все "хочу" просто не хватит инструментов.

Если действительно требуется другое поведение окон приложения, то для этого нужно приложить усилия.
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069439
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitrySergeev79,
авторС Delphi 7 уходил в том числе ради того
уходить надо было не с делфи 7, а с винды. на такую операционку, в которой поведение окон такое как хочется. ну и да. конечно же совсем не обязательно 'городить огороды' для каждой формы. существует, я думаю, как минимум 3-4 способа сделать огород один раз и юзать везде, где нужно. начиная с простейшего наследования.
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069442
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l
ТС нужно понять, что при сворачивании, разворачивании или закрытии текущего окна приложения, не зависимо от того модальное оно или нет, другие открытые окна этого приложения НЕ обязаны автоматически сворачиваться, разворачиваться или закрываться.

И в этом поведении окон приложения не нужно винить используемый инструмент, а тем более менять его. На все "хочу" просто не хватит инструментов.

Если действительно требуется другое поведение окон приложения, то для этого нужно приложить усилия.
Вот, да.
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069449
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon,

"с винды. на такую операционку, в которой поведение окон такое как хочется"

Захотелось вот так, операционка тут же изменила поведение своих окон.
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069464
DmitrySergeev79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wlr-l
DmitrySergeev79,

Из формы 1 открыли форму 2.

Сворачиваем форму 2.

Что должна делать форма 1? Сворачиваться?

А может тот, кто свернул форму 2 просто захотел посмотреть на форму 1, а она взяла и свернулась? Однозначно виновата XE8.


Да, сворачиваться. По-моему, это наиболее логичное поведение. Зачем сворачивать форму, чтобы посмотреть предыдущую, если её можно просто отодвинуть? К тому же всё равно не будет возможности посмотреть таким образом пред-предыдущую форму, тк кнопка "Свернуть" в предыдущей форме неактивна. Кроме того, при нажатии "Свернуть" - пользователь в большинстве случаев ожидает, что именно всё приложение свернётся - он нажимает "Свернуть" - чтобы иметь возможность, например, перейти на рабочий стол или работать с другим приложением. По крайней мере, пользователь должен - имя в заголовке формы -возможность свернуть всё приложение, а не только одну форму.
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069465
DmitrySergeev79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev
IMHO & AFAIK

Читать про SDI и MDI интерфейс для Windows приложений
Читать про стили окон в Windows
Читать, как это нормально делается в Delphi

Не специалист по Depli, но в гугле полно информации, первая же попавшаяся ссылка:

https://delphisources.ru/pages/faq/base/mdi_app_development.html


ОК, почитаю
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069469
DmitrySergeev79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wlr-l
ТС нужно понять, что при сворачивании, разворачивании или закрытии текущего окна приложения, не зависимо от того модальное оно или нет, другие открытые окна этого приложения НЕ обязаны автоматически сворачиваться, разворачиваться или закрываться.

И в этом поведении окон приложения не нужно винить используемый инструмент, а тем более менять его. На все "хочу" просто не хватит инструментов.

Если действительно требуется другое поведение окон приложения, то для этого нужно приложить усилия.


Да я собственно нашёл уже способ - как минимизировать все формы при нажатии "Свернуть" (пример выше). Просто я думал - неужели такое поведение, как по умолчанию в Delphi XE8 (когда сворачивается только одна форма, а остальные недоступны, тк форма открыта модально) - нормально. И надо ли городить подобные костыли, когда всё может (как я думал) решаться стандартными средствами (велосипеды я городить умею - просто решил уточнить - действительно ли такие велосипеды необходимы). Всё грешил на Delphi 7 - что окна косячно работают начиная с Windows Vista/7 - а оказывается, на XE8 такая же ерунда ...
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069470
DmitrySergeev79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon
DmitrySergeev79,
авторС Delphi 7 уходил в том числе ради того

уходить надо было не с делфи 7, а с винды. на такую операционку, в которой поведение окон такое как хочется. ну и да. конечно же совсем не обязательно 'городить огороды' для каждой формы. существует, я думаю, как минимум 3-4 способа сделать огород один раз и юзать везде, где нужно. начиная с простейшего наследования.

Нет, вопрос ухода с винды не стоит. Приложение 400 тысяч строк кода под Винду. Да и у самого у меня опыт в Винде более 20 лет, в другом (типа линукс или мак) шарю на уровне чайника, а не программиста.
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069472
DmitrySergeev79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon
DmitrySergeev79,
авторС Delphi 7 уходил в том числе ради того

уходить надо было не с делфи 7, а с винды. на такую операционку, в которой поведение окон такое как хочется. ну и да. конечно же совсем не обязательно 'городить огороды' для каждой формы. существует, я думаю, как минимум 3-4 способа сделать огород один раз и юзать везде, где нужно. начиная с простейшего наследования.

Насколько я понимаю, с Delphi 7 в любом случае надо уходить в 2021 году. Так как велосипедов приходится изобретать всё больше, чтобы приложение более-менее нормально работало на последних версиях Windows.
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069504
DmitrySergeev79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev
IMHO & AFAIK

Читать про SDI и MDI интерфейс для Windows приложений
Читать про стили окон в Windows
Читать, как это нормально делается в Delphi

Не специалист по Depli, но в гугле полно информации, первая же попавшаяся ссылка:

https://delphisources.ru/pages/faq/base/mdi_app_development.html


Я всё прогуглил несколько раз прежде, чем писать. Как я понял - такое поведение Delphi нормальное. Придется таки писать костыли как и в Delphi 7.
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069581
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitrySergeev79
Leonid Kudryavtsev
IMHO & AFAIK

Читать про SDI и MDI интерфейс для Windows приложений
Читать про стили окон в Windows
Читать, как это нормально делается в Delphi

Не специалист по Depli, но в гугле полно информации, первая же попавшаяся ссылка:

https://delphisources.ru/pages/faq/base/mdi_app_development.html


Я всё прогуглил несколько раз прежде, чем писать. Как я понял - такое поведение Delphi нормальное. Придется таки писать костыли как и в Delphi 7.

Еще раз. При чем тут Делфи? Делфи - только инструмент. Окнами (впрочем и не только ими) заправляет операционка.
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069591
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon

Еще раз. При чем тут Делфи? Делфи - только инструмент. Окнами (впрочем и не только ими) заправляет операционка.


Как я понимаю, конкретно за это поведение (запрет немодальных окон) отвечает VCL
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069802
DmitrySergeev79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon,

Ну если такое поведение Delphi нормальное и чтобы решить задачу, которую я сформулировал, надо писать костыли, нет проблем, буду писать костыли. Благо с наследованием классов за 15 лет работы в Delphi 7 знаком, код который нужен известен и подключить его ко всем формам нет проблем. Просто я думал - может, это как-то решается стандартными средствами, а я как всегда изобретатель велосипедов ...
...
Рейтинг: 0 / 0
Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
    #40069823
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitrySergeev79
Благо с наследованием классов за 15 лет работы в Delphi 7 знаком, код который нужен известен и подключить его ко всем формам нет проблем.


Вам придется сделать общего предка для модальных форм, но модальные формы сторонних компонентов не будут его наследниками, IMHO, лучше заменять WindowProc модальных форм в обработчике Screen.OnActiveFormChange - тогда каждая модальная форма будет обрабатывать WM_SYSCOMMAND, EnableWindow(Application.Handle,true) и пр. в новой WindowProc
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема со сворачиванием окон на Delphi XE8 - сворачивается одно окно вместо всех
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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