![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не обновляется MDIChildCount [D7, WinXP]
kay © (2005-12-05 16:54:00)Есть MDI приложение. При выходе из приложения используется процедура для сохранения данных в окнах. Но при закрытии окон не меняется значение MDIChildCount, оно имеет реальное значение только при начале выполнения процедуры.
Вот процедура закрытия приложения:
procedure Tmain_form.FormClose(Sender: TObject; var Action: TCloseAction);
var
j:integer;
begin
for j:=MDIChildCount-1 downto 0 do
MDIChildren[j].Close;
if MDIChildCount>0 then Action:=caNone;
end;
Даже когда все окна закрыты, значение MDIChildCount равно тому значению, которое было до выполнения процедуры.
Вот процедуры закрытия дочерних окон:
procedure Teko_form.FormClose(Sender: TObject; var Action: TCloseAction);
var
k:integer;
begin
if modified then
begin
k:=MessageDlg('Ñîõðàíèòü '+Caption+' ïåðåä çàêðûòèåì?', mtConfirmation,
[mbYes, mbNo, mbCancel], 0);
case k of
6: begin main_form.saveClick(nil); Action:=caFree; end;
7: Action:=caFree;
2: Action:=caNone;
end;
end
else
Action:=caFree;
end;
//******************************************************************************
procedure Teko_form.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if main_form.MDIChildCount=1 then
begin
main_form.main.Items[0].Items[2].Enabled:=false;
main_form.main.Items[0].Items[3].Enabled:=false;
main_form.run.Enabled:=false;
main_form.save.Enabled:=false;
end;
end;
The Only (2005-12-05 21:33:00) [1]СПАСИБО ОГРОМНОЕ
kay (2005-12-05 18:42:00) [2]спасибо
Игорь Шевченко (2005-12-05 18:38:00) [3]kay © (05.12.05 18:29) [4]
Волшебная процедура обрабатывает все сообщения, связанные с закрытием формы (а их посылается), до тех пор, пока не очистится очередь сообщений. В процессе обработки сообщений в том числе и корректируется значение MDIChildCount (и еще много всего).
kay (2005-12-05 18:29:00) [4]у тебя =)
Игорь Шевченко (2005-12-05 17:50:00) [5]kay © (05.12.05 17:44) [2]
> и можно понитересоваться, что эта волшебная процедура делает?
Поинтересоваться у меня или у клавиши F1 ? :)
kay (2005-12-05 17:44:00) [6]работает, спасибо!
и можно понитересоваться, что эта волшебная процедура делает?
Игорь Шевченко (2005-12-05 17:37:00) [7]
> for j:=MDIChildCount-1 downto 0 do
> MDIChildren[j].Close;
for j:=MDIChildCount-1 downto 0 do begin
MDIChildren[j].Close;
Application.ProcessMessages;
end;
?