![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MDI [D6]
tio © (2006-06-03 15:29:00)Уважаемые, Мастера!
Я долго занимался проблемой MDI приложений, хочу Вам дать на общее
использование код, который пригодится всем, аналогов я не видел, по
крайней мере, на многих сайтах.
Этот код закрывает MDI окна - корректно и правильно.
//В главном MDI окне написать в public
public
procedure WMGetSysCommand(var message : TMessage); message WM_SYSCOMMAND;
end;
procedure TMain_f.WMGetSysCommand(var message : TMessage) ;
var
x:integer;
begin
if (message.wParam = SC_CLOSE) then
begin
for x:=Application.MainForm.MDIChildCount-1 downto 0 do
begin
Application.MainForm.MDIChildren[x].Close;
Application.ProcessMessages;
Next;
end;
end;
inherited;
end;
написать в MDIChild окне:
//Modify : boolean; //флаг изменения
procedure TChild_f.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Modify = false then
begin
case Application.MessageBox(PChar('Документ ''' + Caption + ''' был изменен! Сохранить изменения ?'),'Закрытие документа',MB_YESNOCANCEL + MB_DEFBUTTON3 + MB_ICONQUESTION) of
ID_Yes:
begin
try
CanClose:=true;
except
MessageBox(0,'Ошибка сохранения документа','Сообщение',mb_ok+mb_iconStop);
end;
end;
ID_No:
begin
CanClose:=true;
end;
ID_Cancel:
begin
CanClose:=false;
end;
end; //закрытие case
end; //закрытие begin
end; //закрытие процедуры
procedure TChild_f.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=cafree;
Release;
end;
C уважением Залозных Игорь.
Джо (2006-06-03 15:31:00) [21]Игорь, спасибо, конечно. Но с чего вы взяли, что "корректное и правильное" закрытие MDI-окон является "проблемой"? :)