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

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

09.12.2013, 12:51. Показов 1314. Ответов 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере 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 На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru