Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.20;
Скачать: CL | DM;

Вниз

Событие закрытия дочернего окна в среде MDI   Найти похожие ветки 

 
Big ©   (2004-01-08 16:41) [0]

Как перехватить событие закрытия дочернего окна в среде MDI из главной формы?
Если говорить конкретно, то мне нужно обновлять состояние меню, в зависимости от существования и типов дочерних окон.
Из дочернего окна обновлять не получается - оно уничтожается позже чем выполняется обновление меню (соответсвенно меню обновляется некорректно - только что существующая форма уже не сущетвует).


 
Конница   (2004-01-08 16:46) [1]

OnCloseQuery
f1


 
Игорь Шевченко ©   (2004-01-08 17:55) [2]

Big © (08.01.04 16:41)

Посылать сообщение главному окну из дочернего, о том, что какое-то дочернее окно закрылось и надо обновить меню или что-то еще.


 
Тимохов ©   (2004-01-08 17:59) [3]

1. У меня сделано в formdestroy и formactivate PostMessage(Form_Main.Handle, MSG_MAIN_UpdateFormsList, 0, 0);
2. Обработчик события в главной форме
VAR
kNewItem: TMenuItem;
kI: Integer;
kNewItems: TList;
BEGIN
// Сначала очищаем список окон
for kI := miWindowsSeparator.MenuIndex + 1 to miWindows.Count-1 do
miWindows.Items[miWindowsSeparator.MenuIndex + 1].Free();

// Строим список окон
kNewItems := TList.Create();
try
for kI := MDIChildCount-1 downto 0 do
begin
if MDIChildren[kI] is TForm_MDIChild then
begin
kNewItem := TMenuItem.Create(Self);
kNewItems.Add(kNewItem);
kNewItem.Caption := MDIChildren[kI].Caption;
kNewItem.Tag := Integer(MDIChildren[kI]);
kNewItem.Checked := MDIChildren[kI] = Screen.ActiveForm;
kNewItem.OnClick := fOnWindowsClickMenu;
end;
end;
if kNewItems.Count > 0 then
begin
miWindowsSeparator.Visible := True;
kNewItems.Sort(fDoSort);
for kI := 0 to kNewItems.Count-1 do
begin
TMenuItem(kNewItems[kI]).Caption :=
IntToStr(kI+1) + ". "+ TMenuItem(kNewItems[kI]).Caption;
miWindows.Add(TMenuItem(kNewItems[kI]));
end;
end else
begin
miWindowsSeparator.Visible := False;
end;
finally
kNewItems.Free();
end;


 
Big ©   (2004-01-09 10:47) [4]

Спасибо! Все получилось. Использовал PostMessage.



Страницы: 1 вся ветка

Текущий архив: 2004.01.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.044 c
14-63306
Vlad Oshin
2003-12-26 10:21
2004.01.20
СВЯТОЕ ПИСЬМО :)


8-63258
Psibug
2003-09-15 19:24
2004.01.20
Antialiasing в Opengl


1-63208
Rim
2004-01-09 21:29
2004.01.20
Hint


14-63372
Lord Vader
2003-12-28 08:06
2004.01.20
Нужен алгоритм по выч. математике


1-63119
Tornado
2004-01-08 09:52
2004.01.20
Клавиша Tab