Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 39

Сворачивание MDIChild окна

11.10.2012, 16:30. Показов 4022. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При сворачивании дочернего MDI окна, оно уходит в нижний левый угол родительского окна. Можно ли настроить так, чтобы не показывало это(при сворачивании скрывался полностью)?
Миниатюры
Сворачивание MDIChild окна  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.10.2012, 16:30
Ответы с готовыми решениями:

Размеры рабочей области для mdiChild окна
дд, кто знает подскажите необходимо ограничить рабочую область для дочерней формы mdi приложения между компонентами navbar, statusbar,...

Можно ли из MDIchild формы открывать другую Mdichild форму?
Поясню. Mdichild(дочерняя форма) содержится в mdiform(родительская форма), из родительской формы можно открывать дочерние, можно ли из...

Автозапуск и сворачивание окна
Здравствуйте господа программисты ! Подскажите как можно сделать что бы программа запускалась в месте с виндовс и автоматически...

9
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
11.10.2012, 18:07
Вот из интернета:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
  private
    procedure WMGetSysCommand(var Msg: TMessage); message WM_SYSCOMMAND;
 
...
 
procedure TForm2.WMGetSysCommand(var Msg: TMessage);
begin
  if (Msg.wParam = SC_MINIMIZE) then
    Close 
  else
    inherited;
end;
Проще говоря, перехватываешь сообщениие минимизации формы в котором запускаешь её закрытие. А событии OnClose пишешь:
Delphi
1
Action:=caHide; //Скрыть
На 100% не уверен, но попробуй.
0
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 39
11.10.2012, 18:19  [ТС]
Одиночка, к сожалению повесить на OnClose не получиться. Событие уже задействовано в закрытии дочерней формы.
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
11.10.2012, 18:27
Можешь показать, как именно задействовано.
На крайний случай можешь в таймере проверять:
Delphi
1
If Form2.WindowState=wsMinimize Then Form2.Hide;
Или вообще, в первом коде писать Hide для скрытия.
0
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 39
11.10.2012, 18:33  [ТС]
Одиночка, Закрытие обрабатывается следующим образом:

Delphi
1
2
3
4
5
6
procedure Tformadv.DoClose;
begin
  inherited;
  sendmessage(application.MainForm.Handle, WM_MDIDESTROY, self.Handle, 0);
  action:=cafree;
end;
Сенд использую для обработки в главной форме, где расположены индикаторы, какие дочерние формы открыты, какие закрыты.
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
11.10.2012, 18:44
Hide не пробовал? (Предыдущий мой пост).
0
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 39
11.10.2012, 18:49  [ТС]
Одиночка, так как предложил нет, пробывал так:

Delphi
1
2
3
4
5
6
var i:integer;
begin
 for i := 0 to self.MDIChildCount-1 do
  if (self.MDIChildren[i].WindowState=wsnormal) or(self.MDIChildren[i].WindowState=wsMaximized) then
   self.MDIChildren[i].Hide;
end;
Как итог мне сказали "Cannot hide an MDI Child Form"
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
11.10.2012, 19:07
Вот совет из инета:
Delphi
1
raise EInvalidOperation.Create(SMDIChildNotVisible);
Это для скрытия. Вместо Hide.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
11.10.2012, 19:11
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Anross, перехватывай в дочерней форме WM_SIZE:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TMDIChild = class(TForm)
   // ...
private
   procedure WMSize(var Msg : TWMSIZE) ; message WM_Size;
   // ...
 
procedure TMDIChild.WMSize(var Msg : TWMSIZE);
begin
   if Msg.SizeType = Size_Minimized then
   begin
     ShowWindow(Handle, SW_HIDE); // И скрывай форму
     Msg.Result := 0;
   end
   else Inherited;
end;
, только как потом будешь восстанавливать?
1
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 39
11.10.2012, 22:36  [ТС]
UI, Спасибо, то что нужно. Разворачивание окна не проблема.

Суть вообще такая, есть главная форма, из которой запускаются разнообразные дочерние окна. Для удобства, решил сделать нечто вроде вкладок в браузере. Одна форма-одна вкладка. В качестве вкладок взял TabControl, для управления(сворачивание, разворачивание, закрытие) прикрутил еще PopupMenu. А чтобы не описывать решил для дочерних сделать другой базовый класс, на основе TForm, отличается от которого ток SendMessage для создания, закрытия и управления вкладками.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.10.2012, 22:36
Помогаю со студенческими работами здесь

Создание MDIChild окна, для настроек программы...
Помогите чем сможите. Делаю программу c MDI интерфейсом, в дочернем окне "Ностройки" по смыслу задачи присутствуют CheckBox'ы. Для...

Предотвратить сворачивание окна по нажатию кнопки Windows «Свернуть все окна»
Здравствуйте, пишу что то вроде гаджета на c# wpf, и возник вопрос: можно ли как нибудь предотвратить сворачивание окна при нажатии...

Сворачивание окна по клику в любом месте окна браузера
Приветствую уважаемые форумчане. Есть сайт bm05.ru. Верху над логотипом есть две разворачивающиеся формы отправки сообщений: "Задайте...

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

Сворачивание окна
Когда сворачиваю окно, то оно выглядит вот так (форма не главная)


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru