Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MDI [D6]


Страницы:   1 2

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-окон является "проблемой"? :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо