Уроки по Delphi

       

Procedure TChildForm.Memo1Change(Sender


Тогда нам нужно убрать запрос на сохранение в случае "ручного" сохранения файла, когда пользователь сам выбрал необходимый пункт меню. Изменяем следующие процедуры сохранения файла.

Процедура "Открыть"

procedure TMainForm.N3Click(Sender: TObject);

begin

if OpenDialog1.Execute then

   begin

   ChildForm:=TChildForm.Create(Self);

   ChildForm.Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

   ChildForm.Caption:=OpenDialog1.FileName;

   ChildForm.Memo1.Tag:=0; // добавить

   end;

end;

Процедура "Сохранить как..."



procedure TMainForm.N5Click(Sender: TObject);

begin

if MDIChildCount=0 then Exit;

SaveDialog1.Title:='Сохранить файл как...';

if SaveDialog1.Execute then

   begin

      (ActiveMDIChild as TChildForm).Memo1.Lines.SaveToFile(SaveDialog1.FileName);

      (ActiveMDIChild as TChildForm).Caption:=SaveDialog1.FileName;

      (ActiveMDIChild as TChildForm).Memo1.Tag:=0; // добавить

   end;

end;

Процедура "Сохранить"

procedure TMainForm.N4Click(Sender: TObject);

begin

if MDIChildCount=0 then Exit;

if (ActiveMDIChild as TChildForm).Caption='НОВЫЙ' then

N5Click(Sender) else

   begin // добавить

   (ActiveMDIChild as TChildForm).Memo1.Lines.SaveToFile((ActiveMDIChild as TChildForm).Caption);

   (ActiveMDIChild as TChildForm).Memo1.Tag:=0; // добавить

   end; // добавить

end;

Добавленные строки отделены комментарием "//добавить".

А теперь непосредственно создаем процедуру OnCloseQuery для окна ChildForm.

procedure TChildForm.FormCloseQuery(Sender: TObject;

var CanClose: Boolean);

Var Res:Integer; // переменная для хранения результата выбора действия

begin

if Memo1.Tag=0 then // если не сохранять, то 1, иначе - 2

   begin // 1:

   CanClose:=true; // можно закрыть окно




   end else

   begin // 2:

   Res:=Application.MessageBox('Вы желаете сохранить изменения?','Вопрос',MB_YESNOCANCEL + MB_ICONQUESTION);

   // вопрос на сохранение

   if Res=IDYES then // нажата кнопка "Да"

   begin

   ChildForm.BringToFront; // Расположить данное окно выше всех (сделать активным)

   MainForm.N4Click(Sender); // Вызвать процедуру "Сохранить"

   if Memo1.Tag=1 then CanClose:=false;

   // если пользователь все-таки не сохранил файл, то окно не закрывать

   end;

   if Res=IDNo then CanClose:=true; // если "Нет", то можно закрыть

   if Res=IDCANCEL then CanClose:=false; // если "Отмена", то не закрывать

   end;

end;

Находясь в редакторе кода в файле ChildUnit необходимо подключить модуль главной формы MainUnit через пункт меню "UseUnit".

Аналогом команды MessageBox в Delphi есть команда MessageDLG. Более подробную информацию как по этой, так и по другой можно прочитать в справочной системе. Старайтесь всегда при неизвестных командах пользоваться подсказкой в справочной системе. Надо, чтобы указатель (курсор) находился на интересующем вас слове, и нажать комбинацию клавиш Ctrl+F1.

Архив примера текстового редактора с сегодняшними изменениями вы можете забрать тут.

С уважением, ведущий уроков Semen semen@krovatka.net


Содержание раздела