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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2009, 23:05   #1
Костян Пират
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 103
По умолчанию проверка изменений в Memo и сохранение

проблема: перед закрытием окна приложения нужно проверить, были ли произведены какие-либо изменения в Memo и, если были, то предложить их сохранить.

попытка решения:

Код:
procedure TForm3.Save;
begin
 if SaveDialog1.Execute
  then
   begin
    Memo1.Lines.SaveToFile(SaveDialog1.FileName+'.txt');
    Memo1.Modified:=false;
   end;
end;

procedure TForm3.AltF4Click(Sender: TObject);
var
 rez: TModalResult;
begin
 if Memo1.Modified
  then
  begin
   rez:=MessageDlg('Текст решения не был сохранён.'+#13#10+
         'Хотите сохранить его перед выходом?',mtConfirmation,[mbYes,mbNo],0);
   if rez=mrOK then Save;//вот ошибка-то...
  end;
end;

Последний раз редактировалось mihali4; 20.03.2009 в 00:24.
Костян Пират вне форума Ответить с цитированием
Старый 19.03.2009, 23:26   #2
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Вроде бы всё правильно. Можно делать проверку по событию формы OnCloseQuery и оформить Save как функцию: если вернула True - закрыть форму, если False - в обработчике OnCloseQuery установить CanClose := False.
Jeni вне форума Ответить с цитированием
Старый 19.03.2009, 23:33   #3
Костян Пират
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 103
По умолчанию

при изменении в мемо спрашивает, но вне зависимости от того какую кнопку жмёшь, окно просто закрывается, почему-то savedialog не появляется...
Костян Пират вне форума Ответить с цитированием
Старый 19.03.2009, 23:53   #4
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Проблема в MessageDlg, наверное неправильное значение проверяется. Я этой функцией не пользуюсь, так что точно сказать не могу. Можно заменить на аналогичный кусок, это сработает.
Код:
rez:=Application.MessageBox('Текст решения не был сохранён.' + #13#10 +
       'Хотите сохранить его перед выходом?', 'Сохранение', MB_OKCANCEL);
if rez=IDOK then Save;
Jeni вне форума Ответить с цитированием
Старый 19.03.2009, 23:54   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Код:
//Кнопка на сохранение
procedure TForm1.SaveClick(Sender: TObject);
begin
With SaveDialog1 do
  if Execute then
    begin
      Memo1.Lines.SaveToFile(SaveDialog1.FileName);
      Caption:=ExtractFileName(SaveDialog1.FileName);
    end;
Memo1.Modified:=false;
end;

//На закрытие формы
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Memo1.Modified=true then
  begin
    if MessageDlg('Текстовый файл был изменен. Сохранить изменения?',mtInformation,[mbYes, mbNo],0)=mrYes then
      Save.Click;
  end;
end;
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 20.03.2009, 22:27   #6
Костян Пират
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 103
По умолчанию

спасибо всем за участие, особенно mihali4 за внимательность! тайное становится явным
Костян Пират вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
внесение изменений в реестр Experementator Общие вопросы Delphi 2 19.11.2008 12:03
Внесение изменений в БД (Access) Patriot1 БД в Delphi 11 18.11.2008 14:15
Протоколирование изменений в реестре. Cerber24 Общие вопросы Delphi 1 07.05.2008 12:21
Поиск изменений в Таблицах Pabelu Microsoft Office Excel 3 26.04.2008 17:57
Проверка, является ли поле Memo пустым или нет. Ветас Помощь студентам 1 24.02.2008 12:47