Другие языки программирования и технологии
Delphi: как проверить при закрытии и возможно сохранить файл после редактирования?
Я делаю простой текстовый редактор
Для сохранения используй компонент TSaveDialog с вкладки Dialogs. Для проверки на сохранённость перед закрытием сделай логическую переменную и пропиши ей false на OnCreate главной формы или ещё где-нибудь в начале. На событии срабатывания SaveDialog выставляй эту переменную в True до следующих изменений.
Доброго времени суток.
Вы на базе чего делаете свой редактор? Случайно не 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;
Удачи!
Вы на базе чего делаете свой редактор? Случайно не 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;
Удачи!
Здесь правильно говорят про переменную. Как член формы сделай. Вот только по идее должно быть наоборот. Когда надо ты ставишь переменную например в True и пере закрытием проверяешь. И если она True то показываешь диалог сохранения. Для отмены закрытия формы есть событие OnClosing. ТОлько именно OnClosing а не OnClose. Там можно изменить параметры которые передаются в обработчик и тем самым отменить зарктиые формы. От завершения через диспетчер задач это разумеется не спасёт.
Похожие вопросы
- Если скачать эту картинку, поменять у сохранённого файла расширение с jpg на rar и открыть архиватором, окажутся файлы.
- Уважаемые пользователи Linux, прошу помочь: хочу сохранить файл изменённый в Kate а мне выдается такая ошибка: The docume
- Не могу сохранить файл в программе CorelDraw, что делать?
- Сохранение из StringGrid в файл и загрузка из файла - Delphi
- Delphi 2010 + LAN + передача файлов = ???
- Delphi, работа с файлами
- Нужна помощь в редактировании программы на языке delphi, а именно часов.
- Согласны с этим - Глубинные причины ненависти к Delphi/Pascal ?
- Delphi. Создать автоматически 100 текстовых файлов в папке. с именем от 0 до 99
- Редактирование pdf-файлов