Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2013, 15:26   #1
fedorov2012
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 61
Вопрос Как в MDI спрятать панельку, отображающаяся при сворачивании child-окна?

Скажите, пожалуйста, как в MDI приложении спрятать панельку, отображающаяся при сворачивании child-окна (см. вложение)?
Дело в том, что при сворачивания дочернего окна вместо стандартной панельки у меня будут формироваться вкладки на отдельной панели типа как в Windows'e.
Изображения
Тип файла: jpg mdi.JPG (11.8 Кб, 100 просмотров)
fedorov2012 вне форума Ответить с цитированием
Старый 05.01.2013, 15:51   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

и какой вам тогда смысл в MDI?
Куда вы эти окна денете потом? И откуда будите доставать...
Человек_Борща вне форума Ответить с цитированием
Старый 05.01.2013, 16:13   #3
fedorov2012
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 61
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
и какой вам тогда смысл в MDI?
Самый прямой - работа с дочерними окнами
Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Куда вы эти окна денете потом? И откуда будите доставать...
Очень просто - у меня есть мой специальный класс-список TWindowList для хранения + некоторые полезные методы для этих окон.
fedorov2012 вне форума Ответить с цитированием
Старый 05.01.2013, 16:55   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Попробуйте ShowWindow функцию...
Человек_Борща вне форума Ответить с цитированием
Старый 05.01.2013, 19:53   #5
fedorov2012
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 61
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Попробуйте ShowWindow функцию...
Вообщем посмотрел и провел эксперименты. Работает криво.
Для скрытия дочернего окна MDI-приложения, при этом чтобы не создавалась панелька (см. первоначальный вопрос этого топика) использую такой код:
Код:
procedure TMDIChildForm.WMSysCommand(var Msg: TWMSysCommand);
begin
  if (Msg.CmdType = SC_MINIMIZE) then
    ShowWindow(Self.Handle, SW_HIDE)
  else
    inherited;
end
или такой (разницы нет):
Код:
procedure TMDIChildForm.WMSize(var Msg: TWMSIZE);
begin
  if (Msg.SizeType = SIZE_MINIMIZED) then
  begin
    ShowWindow(Handle, SW_HIDE);
    Msg.Result := 0; { не понятно зачем нужно обнулять результат, ну да ладно }
  end
  else
    inherited;
end;
Кривизна проявляется в следующем: если открыть два дочерних окна (окно 1 и окно 2), затем окно 1 максимизировать (разворачивается на всю MDIForm), и после чего его свернуть, в результате
это окно 1 спрячется с экрана, и при этом активизируется окно 2, которое было до этого не активно - все вроде бы хорошо, НО если попытаться свернуть окно 2, то вместо скрытие оно разворачивается на всю MDI-форму (максимизируется), если после этого окно 2 вновь попытаться свернуть, то оно свернется но почему-то вдруг появляется окно 1. Какой-то бред вообщем наступает. Почему так получается?

Последний раз редактировалось fedorov2012; 05.01.2013 в 19:56.
fedorov2012 вне форума Ответить с цитированием
Старый 05.01.2013, 19:58   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Потому что Borland так реалализовал MDI-технологию в своё время. Ничего путного у вас не получится
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.01.2013, 20:01   #7
fedorov2012
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 61
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Потому что Borland так реалализовал MDI-технологию в своё время
С трудом вериться
fedorov2012 вне форума Ответить с цитированием
Старый 09.01.2013, 23:14   #8
fedorov2012
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 61
По умолчанию

Выявлена ещё одна проблема - 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?
fedorov2012 вне форума Ответить с цитированием
Старый 09.01.2013, 23:44   #9
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Вы хотите сделать однооконный интерфейс что ли? Тогда вовсе не в ту сторону смотрите...Взгляните лучше, что из себя представляют фреймы...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 10.01.2013, 00:29   #10
fedorov2012
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 61
Вопрос

Цитата:
Сообщение от spamer Посмотреть сообщение
Вы хотите сделать однооконный интерфейс что ли? Тогда вовсе не в ту сторону смотрите...Взгляните лучше, что из себя представляют фреймы...
НЕТ, Хочу MDI-приложение с вкладками для окон
fedorov2012 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При максимизации MDI child пропадают кнопки мини/максимизации Sullla Общие вопросы Delphi 1 08.08.2011 08:32
как при сворачивании формы скрыть ее из панели betirsolt Общие вопросы Delphi 3 17.04.2010 17:57
Передача параметра с MDI родителя в MDI child через DLL ByXalkin Общие вопросы Delphi 0 15.12.2009 17:21
Передача параметров между MDI Child 8alig8 Общие вопросы Delphi 7 22.06.2009 16:39
Как сделать чтобы дочерние окна в MDI-приложениях были вне главного окна??? dimonchuk Общие вопросы Delphi 1 11.08.2007 12:13