Другие языки программирования и технологии

Delphi: как проверить при закрытии и возможно сохранить файл после редактирования?

Я делаю простой текстовый редактор
J.
Jako ..
13 328
Для сохранения используй компонент TSaveDialog с вкладки Dialogs. Для проверки на сохранённость перед закрытием сделай логическую переменную и пропиши ей false на OnCreate главной формы или ещё где-нибудь в начале. На событии срабатывания SaveDialog выставляй эту переменную в True до следующих изменений.
Евгений Вдруг
Евгений Вдруг
2 304
Лучший ответ
Доброго времени суток.

Вы на базе чего делаете свой редактор? Случайно не TMemo? Если да, то у этого компонента есть свойство: property Modified: Boolean; (Modified indicates whether the user edited the text of the edit control.) Вот его и надо проверять перед выходом. И если оно True, то вызывать диалог сохранения файла. Примерно так.

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// если есть не сохраненные данные в мемо
if Memo1.Modified then begin
if MessageBox(0, 'Данные не сохранены. Сохранить? ',
'Предупреждение',
MB_YESNO + MB_ICONEXCLAMATION + MB_TASKMODAL) = IDYES then begin
mFileSaveClick(nil); // вызов диалога сохранения файла и само сохранение
if Memo1.Modified then Action := caNone; // если вдруг решили отказаться от сохранения
end;
end;

// окно закрывается
if (Action = caHide) then begin
if Modified then begin
StatusBar1.Panels.Items[2].Text := 'Сохранение настроек';
SaveSettings;
StatusBar1.Panels.Items[2].Text := '';
end;
end;

end;

Удачи!
Сергей Щукин
Сергей Щукин
59 613
Здесь правильно говорят про переменную. Как член формы сделай. Вот только по идее должно быть наоборот. Когда надо ты ставишь переменную например в True и пере закрытием проверяешь. И если она True то показываешь диалог сохранения. Для отмены закрытия формы есть событие OnClosing. ТОлько именно OnClosing а не OnClose. Там можно изменить параметры которые передаются в обработчик и тем самым отменить зарктиые формы. От завершения через диспетчер задач это разумеется не спасёт.
Виктор Есин
Виктор Есин
52 417