Показать полную графическую версию : [решено] Сохранение в файл
novashdima
11-02-2013, 15:35
Делал так, файл не перезаписывался, хотя имхо должен:
if SaveDialog.Execute then
if FileExists(SaveDialog.FileName) then
begin
if (MessageDlg('Файл уже существует.' + #13#10 + 'Переписать?', mtConfirmation, mbOkCancel, 0) <> mrOk)
then Exit;
end
else
IniFile.IniOptions.SaveToFile(SaveDialog.FileName);
Вставил ветку else и туда написал IniFile.IniOptions.SaveToFile(SaveDialog.FileName); и все работает, но почему в начальном варианте не работает? ведь в любом случае последняя строка должна выполняться в любом случае... или я туплю.
но почему в начальном варианте не работает? »
Код начального варианта?
Может вы попросту забыли поставить после end ";"?
then Exit;
end;
novashdima
11-02-2013, 15:51
Код начального варианта? »
Это и есть начальный вариант, потом я добавил функцию в указанное место.
Может вы попросту забыли поставить после end ";"? »
Перед else точка с запятой не ставится
Перед else точка с запятой не ставится »
В начальном варианте же у вас нет вроде бы else.Вставил ветку else и туда написал
IniFile.IniOptions.SaveToFile(SaveDialog.FileName); и все работает »
В коде то же.
потом я добавил функцию в указанное место »
Присутствует в коде, значит не начальный вариант.
Либо вы вставили здесь then Exit; end »
Выражайтесь понятнее, пожалуйста.
novashdima
11-02-2013, 16:40
эх.... ок, вот начальная процедура
procedure TMainForm.SaveButtonClick(Sender: TObject);
begin
if SaveDialog.Execute then
if FileExists(SaveDialog.FileName) then
begin
if (MessageDlg('Файл уже существует.' + #13#10 + 'Переписать?', mtConfirmation, mbOkCancel, 0) <> mrOk)
then Exit;
end
else
IniFile.IniOptions.SaveToFile(SaveDialog.FileName);
end;
Вот добавил строку:
procedure TMainForm.SaveButtonClick(Sender: TObject);
begin
if SaveDialog.Execute then
if FileExists(SaveDialog.FileName) then
begin
if (MessageDlg('Файл уже существует.' + #13#10 + 'Переписать?', mtConfirmation, mbOkCancel, 0) <> mrOk)
then Exit
else IniFile.IniOptions.SaveToFile(SaveDialog.FileName);
end
else
IniFile.IniOptions.SaveToFile(SaveDialog.FileName);
end;
ведь в любом случае последняя строка должна выполняться в любом случае... »
Это вот эта чтоли:
else IniFile.IniOptions.SaveToFile(SaveDialog.FileName); »
С чего это она в любом случае должна выполняться? Только если файл не существует.
Вот во втором варианте вы вписали сохранение файла и в ту ветку, которая выполняется при существовании файла, поэтому у вас и начало работать.
novashdima
11-02-2013, 17:16
С чего это она в любом случае должна выполнятся? Только если файл не существует. »
Хм... действительно провтыкал...
Если вы используете "Exit", то зачем столько "else", не проще было бы так:
procedure TMainForm.SaveButtonClick(Sender: TObject);
begin
if SaveDialog.Execute then
begin
if FileExists(SaveDialog.FileName) then
if (MessageDlg('Файл уже существует.' + #13#10 + 'Переписать?', mtConfirmation, mbOkCancel, 0) <> mrOk) then Exit;
IniFile.IniOptions.SaveToFile(SaveDialog.FileName);
end
end;
novashdima
12-02-2013, 19:27
Если вы используете "Exit", то зачем столько "else", не проще было бы так: »
Да, спасибо, именно так я и хотел написать, но написал чуть по-другому, а потом что-то башка не варила, так и не сообразил.
Ну да...., не проще ли, блок if not (FileExists(..))..., а в нем if SaveDialog.Execute...
novashdima
13-02-2013, 06:37
Ну да...., не проще ли, блок if not (FileExists(..))..., а в нем if SaveDialog.Execute... »
Это как? сначала FileExist, а потом уже SaveDialog.Execute?
И что это за бред? Сначала проверка на существование файла(какого непонятно), а потом уже проверка выполнения SaveDialog?
И что это за бред? »
Бред, это когда мы заранее не определяем - что хотим, и как хотим.
novashdima
13-02-2013, 17:15
Бред, это когда мы заранее не определяем - что хотим, и как хотим. »
Может я вас неправильно понял, объясните свою идею лучше, или код приведите
Может я вас неправильно понял, объясните свою идею лучше, или код приведите »
Не знаю..., может и неправильно, просто думаю, что изобретать велосипед не к чему.
1. SaveDialog имеет свойства, среди которых имеется OfOverwritePrompt. Установка его в true (в компоненте) или программно (SaveDialog.Options := SaveDialog.Options + [ofOverwritePrompt]) вызывает стандартный диалог ("Файл уже существует. Заменить его?").
2. Файлы связанные с программой, при сохранении не нужно "тыкать" куда вздумается (или в папке с программой, или в папке "Пользователя" (что особенно актуально для работы в Windows 7 >), как и принуждать, каждый раз делать выбор (лучше предусмотреть выбор - "По умолчанию", или "Сохранить как..."). Свойств InitialDir и/или FileName для этого вполне хватает.
3. Проверять существование файла и выводить свой диалог, необходимо или при сохранении по умолчанию - без вызова SaveDialog, или при открытии файла.
novashdima
14-02-2013, 01:04
1. SaveDialog имеет свойства, среди которых имеется OfOverwritePrompt. Установка его в true (в компоненте) или программно (SaveDialog.Options := SaveDialog.Options + [ofOverwritePrompt]) вызывает стандартный диалог ("Файл уже существует. Заменить его?"). »
Спасибо, не знал, надо будет почаще проверять опции.
2. Файлы связанные с программой, при сохранении не нужно "тыкать" куда вздумается (или в папке с программой, или в папке "Пользователя" (что особенно актуально для работы в Windows 7 >), как и принуждать, каждый раз делать выбор (лучше предусмотреть выбор - "По умолчанию", или "Сохранить как..."). Свойств InitialDir и/или FileName для этого вполне хватает. »
По умолчанию при вызове диалогового окна предлагается сохранить в папке с программой.3. Проверять существование файла и выводить свой диалог, необходимо или при сохранении по умолчанию - без вызова SaveDialog, или при открытии файла. »
Так и делаю, поэтому по привычке стал и в SaveDialog писать проверку на существование файла.
По умолчанию при вызове диалогового окна предлагается сохранить в папке с программой. »
Зачем? Вызов SaveDialog - это уже не по умолчанию, а выбор.
Добавьте переключатель (CheckBox) и обрабатывайте - или сохранение по умолчанию (с проверкой существования файла и запроса на его перезапись), или свобода выбора для пользователя - вызов SaveDialog.
novashdima
14-02-2013, 14:08
Зачем? Вызов SaveDialog - это уже не по умолчанию, а выбор.
Добавьте переключатель (CheckBox) и обрабатывайте - или сохранение по умолчанию (с проверкой существования файла и запроса на его перезапись), или свобода выбора для пользователя - вызов SaveDialog. »
Ок, у меня свобода выбора - SaveDialog
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.