С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 47
1

Как в MDI спрятать панельку, отображающуюся при сворачивании дочернего-окна?

05.01.2013, 15:30. Показов 1895. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Скажите, пожалуйста, как в MDI приложении спрятать панельку, отображающаяся при сворачивании child-окна (см. вложение)? Дело в том, что при сворачивания дочернего окна вместо стандартной панельки у меня будут формироваться вкладки на отдельной панели типа как в Windows'e.
Миниатюры
Как в MDI спрятать панельку, отображающуюся при сворачивании дочернего-окна?  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2013, 15:30
Ответы с готовыми решениями:

MDI приложение. Баг при программном разворачивании дочернего окна
Решил попробовать MDI приложение. Столкнулся со странным багом. При добавлении дочерних окон, если...

ToolStrip MDI-формы съезжает вниз при развертывании дочернего окна на весь экран
Доброго дня! Программно добавляю ToolStrip в родительскую форму MDI. А при разворачивании дочернего...

Как изменить Memo активного дочернего окна MDI приложения?
Добрый день, задача: MDI приложение, у которого есть доп. инфорамционное окно (не дочернее), в...

Как задать информацию, отображающуюся в левой части окна, при просмотре архива в WinRAR?
Скажите, я вот видел архивы где слева окошко с содержимым, а справа идет инфа, а где задается инфа...

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32992 / 21298 / 8180
Регистрация: 22.10.2011
Сообщений: 36,593
Записей в блоге: 8
05.01.2013, 15:44 2
Вот так
1
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 47
05.01.2013, 19:47  [ТС] 3
Спасибо, сейчас буду смотреть

Добавлено через 1 час 33 минуты
Цитата Сообщение от UI Посмотреть сообщение
Вообщем посмотрел и провел эксперименты. Работает криво.
Для скрытия дочернего окна MDI-приложения, при этом чтобы не создавалась панелька (см. первоначальный вопрос этого топика) использую такой код:
Delphi
1
2
3
4
5
6
7
8
procedure TMDIChildForm.WMSysCommand(var Msg: TWMSysCommand);
begin
  if (Msg.CmdType = SC_MINIMIZE) then
    ShowWindow(Self.Handle, SW_HIDE)
  else
    inherited;
  end;
end
или такой (разницы нет):
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TMDIChildForm.WMSize(var Msg: TWMSIZE);
begin
  if (Msg.SizeType = SIZE_MINIMIZED) then
  begin
     ShowWindow(Self.Handle, SW_HIDE);
     Msg.Result := 0; { не понятно зачем нужно обнулять результат, ну да ладно }
  end
  else
     inherited;
end;
Кривизна проявляется в следующем: если открыть два дочерних окна (окно 1 и окно 2), затем окно 1 максимизировать (разворачивается на всю MDIForm), и после чего его свернуть, в результате
это окно 1 спрячется с экрана, и при этом активизируется окно 2, которое было до этого не активно - все вроде бы хорошо, НО если попытаться свернуть окно 2, то вместо скрытие оно разворачивается на всю MDI-форму (максимизируется), если после этого окно 2 вновь попытаться свернуть, то оно свернется но почему-то вдруг появляется окно 1. Какой-то бред вообщем наступает. Почему так получается?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32992 / 21298 / 8180
Регистрация: 22.10.2011
Сообщений: 36,593
Записей в блоге: 8
06.01.2013, 13:59 4
Цитата Сообщение от fedorov2012 Посмотреть сообщение
{ не понятно зачем нужно обнулять результат, ну да ладно }
Затем, что в MSDN написано:
If an application processes this message, it should return zero.
Убери ветку Else, и сделай Inherited безусловно:
Delphi
1
2
3
4
5
6
procedure TMDIChildForm.WMSize(var Msg: TWMSIZE);
begin
  if (Msg.SizeType = SIZE_MINIMIZED) then
     ShowWindow(Self.Handle, SW_HIDE);
  inherited; // Теперь обнулять результат не надо, это сделает обработчик VCL
end;
, тогда не должно быть описанного тобой поведения.
0
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 47
06.01.2013, 20:28  [ТС] 5
Цитата Сообщение от UI Посмотреть сообщение
Затем, что в MSDN написано:

Убери ветку Else, и сделай Inherited безусловно
Да, я так попробовал - работает нормально (тоже самое и для WMSysCommand если его inherited убрать из else), НО возникает неприятное мельтешение, а именно если окно развернуто и мы его сворачиваем, то прежде чем оно исчезнет сначала появляется стандартная панелька при сворачивании (см. рис в начале топика), а уже потом вместе с дочерним окном прячется. Что делать?
0
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 47
09.01.2013, 23:04  [ТС] 6
Выявлена ещё одна проблема - ShowWindow(Self.Hande, SW_HIDE) скрывает только если Self.Active = True, в случае Self.Active = False оно не работает. Как выяснил:
Открывает в MDI-приложении окно1 максимизируем его, затем открываем окно 2 (оно автоматически максимизируется), затем сворачиваем окно2, а затем окно1, затем максимизируем окно 1 (через ShowWindow(Self.Hande, SW_SHOWMAXIMIZED), а теперь самое интересно когда мы начнем максимизировать окно2 (также через ShowWindow), то окно1 минимизируется почему-то (видать так работает MDI) и вот когда в WMSize этого окна приходит сообщение SW_MINIMIZED Self.Active=False и ShowWindow(Self.Hande, SW_HIDE) просто тупо не прячет окно и у нас в результате возникнет панельки (та что приведена в рисунке в начале топика).
Как заставить ShowWindow(Self.Hande, SW_HIDE) работать при Self.Active = False?
0
09.01.2013, 23:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2013, 23:04
Помогаю со студенческими работами здесь

Как заблокировать вызов нового дочернего окна пока не закрыто предыдущее в MDI parent form
Привет ребятушки!!! Не подскажете, как заблокировать открытие дочернего окна в родительском,...

MDI: При вызове активного дочернего окна пункты его menuStrip отображались на menuStrip родителя
Есть родительская форма, на форме menuStrip с пунктами: Item1, Item2, Item3. Есть дочерняя форма,...

Событие активации дочернего mdi окна
Добрый день! На форме создан QMdiArea, а в нем несколько дочерних mdi-окон. Есть ли какой-то...

Открытие дочернего окна в MDI приложении внутри вкладки TabControl
Вообщем обычное с виду MDI приложение. Есть родительская форма MainForm на ней расположен...

Как выполнить ряд действий при сворачивании окна?
Подскажите, пожалуйста, как сделать так, чтобы при сворачивании окна приложения выполнялись...

При открытии дочернего окна, отображаются формы и кнопки с основного окна; как исправить?
при открытии дочернего окна, отображаются формы и кнопки с основного окна, как можно исправить? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru