Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2011, 18:44   #11
Armorer
Подтвердите свой е-майл
 
Регистрация: 07.04.2007
Сообщений: 120
По умолчанию

Спасибо всем, сам бы не додумался , сделал так:

Код:
  TfMain = class(TForm)
  private
    CloseProg: boolean;

    procedure CloseMessage(var Message: TMessage); message WM_CLOSE;
    procedure Close;

Код:
procedure TfMain.Close;
var
  i: integer;
begin
  CloseProg := MessageDlg('Вы уверены что хотите закрыть программу?', mtWarning, mbYesNo, 0) = mrYes;

  if CloseProg then
  begin

    for i := 0 to MDIChildCount - 1 do
      MDIChildren[i].OnCloseQuery := nil;

    inherited;
  end;
end;

procedure TfMain.CloseMessage(var Message: TMessage);
begin
  Close;

  if CloseProg then
    Message.Msg := WM_NULL;
end;
Так как метод Close статичный приходится еще обрабатывать сообщение WM_CLOSE чтобы одинаково работало при вызове close и при сообщении (например, оно приходит если крестик нажать).

Не уверен, что это лучший метод, но работает так как нужно. И без глобальных переменных
Armorer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрытие и открытие дочерних MDI окон приложения chandrasecar Общие вопросы Delphi 4 16.05.2011 13:41
Закрытие всех дочерних форм belarusfight C# (си шарп) 3 26.02.2011 15:06
Много дочерних форм... L.A.M.E.R. Общие вопросы Delphi 4 03.08.2010 08:13
Расположение дочерних MDI окон слева-направо и сверху-вниз Umdis Общие вопросы Delphi 2 30.11.2009 07:05
AlphaSkins. Как убрать скин с дочерних MDI Форм? chandrasecar Компоненты Delphi 4 11.02.2009 20:06