С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814

Событие ЗакрытиеДочернегоОкна

09.12.2013, 12:51. Показов 1298. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В MDI приложении для главной формы какое событие отвечает за закрытие дочернего окна (не ActiveMDIChild) на крестик?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.12.2013, 12:51
Ответы с готовыми решениями:

MaskedTextBox1 событие по системным часам - что должно вызывать это событие?
Добрый день! Помогите разобраться с ситуацией пожалуйста. На форме висит элемент maskedTextBox с маской DateTime. (00:00) Задача, чтобы он...

Событие выбора строки при выборе мышкой событие обрабатывается два раза
Есть JTable, обрабатываю событие выбора строки след. образом: ListSelectionModel r = jTable1.getSelectionModel(); ...

Как обработать событие click и событие нажития стрелки?
Допустим есть кнопка влево-вправо для горизонтального листания товаров. Как нужно кроссбраузерно обрабатывать одновременно событие click...

18
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
09.12.2013, 13:23
При чем тут "главная форма" и "закрытие дочернего окна"? За закрытие дочернего окна отвечает само дочернее окно. Чего надо-то, объясни?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
09.12.2013, 14:03  [ТС]
UI, надо в главной форме перестроить меню по закрытию произвольного дочернего.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
09.12.2013, 14:45
Можешь при закрытии дочернего окна (в его обработчике OnClose) выслать главному окну какое-нибудь заранее согласованное сообщение (например, WM_USER + 1), а в главном, при его получении, перестраивать меню.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
09.12.2013, 14:48  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Можешь при закрытии дочернего окна (в его обработчике OnClose) выслать главному окну какое-нибудь заранее согласованное сообщение (например, WM_USER + 1), а в главном, при его получении, перестраивать меню.
Подобный ход мыслей у меня был. С представлением реализации проблемы.
Обработчик сообщения в таймере?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
09.12.2013, 14:54
Зачем? Переопределение WndProc еще никто не отменял, да и
C++
1
2
3
4
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_USER+1, TMessage, WMUSER1)
END_MESSAGE_MAP(TForm)
void __fastcall WMUSER1(TMessage & msg);
тоже.
2
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
09.12.2013, 16:57
- UI, зачем так сложно, лезть в API. Можно в том-же обработчике OnClose дочерней формы вызвать
заранее определенный метод основной формы:
C++
1
  Form1->Menu_Fun();
, а уж этот метод сделает все что надо с Вашим Меню ...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
09.12.2013, 18:28
Иногда это недопустимо. К тому же, возможно, пересчет меню должен быть сделан уже БЕЗ существования удаляемой дочерней формы. На момент работы OnClose форма еще существует, и пока выполнение этого обработчика не закончится - будет существовать.

Тот метод, который я предложил, работает всегда. Если тебе нужны частичные решения - это не ко мне.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
10.12.2013, 09:56  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Если тебе нужны частичные решения - это не ко мне.
Не нужны. Потому и обратился.
0
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
10.12.2013, 10:10
- Значит у меня, UI, не было таких "тонких" случаев. Я делал так всегда и всегда проходило ...
Спасибо за Ваш вариант, буду иметь в виду!
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
10.12.2013, 11:52  [ТС]
UI, что указать в HWND для SendMessage?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
10.12.2013, 13:03
Хендл первой формы, конечно: Form1->Handle
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
10.12.2013, 14:11  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Хендл первой формы, конечно: Form1->Handle
И тем не менее я что-то сделал не так.
Вложения
Тип файла: rar MDI.rar (20.2 Кб, 2 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
10.12.2013, 14:21
childwin.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//---------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 
#include "ChildWin.h"
#include "Main.h" // <--- Вот этого не было
//--------------------------------------------------------------------- 
#pragma resource "*.dfm"
//--------------------------------------------------------------------- 
__fastcall TMDIChild::TMDIChild(TComponent *Owner)
    : TForm(Owner)
{
}
//--------------------------------------------------------------------- 
void __fastcall TMDIChild::FormClose(TObject *Sender, TCloseAction &Action)
{
    Action = caFree;
    SendMessage(MainForm->Handle,WM_USER+1, Index, 0);
}
//---------------------------------------------------------------------
Добавлено через 3 минуты
И потом, почему SendMessage? У тебя тогда будет ровно то же самое, что я описывал в посте №8: обработчик OnClose не завершится, пока сообщение не будет обработано главной формой. Посылай асинхронно, через PostMessage.
2
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
10.12.2013, 14:21  [ТС]
UI, без инклудов HWND_BROADCAST позволит сделать?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
10.12.2013, 14:41
Ты потом запаришься ловить сообщение, переданное через HWND_BROADCAST, лучше не делай глупостей. Чем include помешал?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
10.12.2013, 14:47  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Ты потом запаришься ловить сообщение, переданное через HWND_BROADCAST, лучше не делай глупостей.
Окэ. Не буду.
Цитата Сообщение от UI Посмотреть сообщение
Чем include помешал?
Я уже где-то намудрил - линкер предупреждает.
Code
1
2
3
[Linker Warning] Public symbol '_FormAddNew' defined in both module MAIN.OBJ and CHILDWIN.OBJ
[Linker Warning] Public symbol '_FormAddNew' defined in both module MAIN.OBJ and UNIT1.OBJ
[Linker Warning] Public symbol '_FormAddNew' defined in both module CHILDWIN.OBJ and UNIT1.OBJ
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
10.12.2013, 14:52
Правильно делает. Зачем ты внутрь Main.h вставил #include "Childwin.h"? Убрать его оттуда надо. Вместе с extern-описанием MDIChildCreate, я вот сейчас закомментировал эти 2 вещи, и добавил ChildWin.h в CPP-файле, а не в хидере, и ничего, никто не ругается.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
10.12.2013, 15:08  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Зачем ты внутрь Main.h вставил #include "Childwin.h"?
Я этого не делал. Это сам билдер.

Перебрал инклуды. Избавился от предупржедения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.12.2013, 15:08
Помогаю со студенческими работами здесь

Принудительно вызвать событие, если произошло другое событие
Сразу оговорюсь, это тема про события, а НЕ про Windows Forms, да бы ни кто не переносил тему. В Windows Forms у тех или иных...

В каждом из n независимых испытаний событие А происходит с вероятностью p. Найти вероятность того, что событие А произошло
В каждом из n независимых испытаний событие А происходит с вероятностью p. Найти вероятность того, что событие А произошло: а) точно G...

Если есть форма и есть событие, а процедуры, его обрабатывающей нет в исходниках, то как это событие обрабатывается?
Друзья! Изучаю синтаксис дельфи. Ну то есть к примеру такой код: procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char); ...

Класс: Как обработать событие последнего объекта в форме, не создавая в классе объекта промежуточное событие?
Итак! Проблема состоит в следующем! Имеется класс в который входит объект второго класса. В последнем классе имеется событие. Как правильно...

Событие при активации textbox. Или событие при изменения фокуса
Здравствуйте. Подскажите можно ли создать свое событие происходящий вовремя активации textbox. Имеется ввиду создать свой класс...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru