Помощь - Поиск - Пользователи - Календарь
Полная версия: saveDialog
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Client
Привет!
Я хочу создать файл с выбранным расширением. Использую saveDialog. В лейбл вывожу имя файла, но файл не имеет расширения. Как из saveDialog'а вытащить выбраное расширение? Название файла ввел - "пример".
И как создать файл в дельфи? assign и rewrite? или есть другие способы?
volvo
Надо вытягивать расширение из поля Filter и приклеивать его к имени файла. Вот пример:
procedure TForm1.Button1Click(Sender: TObject);
var
sL: TStringList;
ix: Integer;
begin
if SaveDialog1.Execute() then begin
sL := TStringList.Create;
try
ix := 2 * Pred(SaveDialog1.FilterIndex);
ExtractStrings(['|'], [], PChar(SaveDialog1.Filter), sL);
ShowMessage(SaveDialog1.FileName + Copy(sL[ix], 2, Length(sL[ix]) - 1));
finally
sL.Free;
end;
end;
end;

Цитата
И как создать файл в дельфи? assign и rewrite? или есть другие способы?
Да там способов - миллион... Можно заполнить данными тот же TStringList и потом записать его в файл (SaveToFile)... Все зависит от того, какой файл тебе нужен в результате, что он содержать должен.
Client
ОГО, такой код мне и не снился wacko.gif
Как сделать чтобы при попытке сохранить В УЖЕ существующий файл он выдавал запрос, т.е. не делать самому а с помощью WIN способов?
volvo
Ну, я бы сделал так: 1) выделяем тот код, который я привел выше для построения полного имени файла в отдельную функцию, и 2) вешаем обработчик на событие OnCanClose твоего SaveDialog-а:
function GetFullName(dialog: TSaveDialog): string;
var
sL: TStringList;
ix: integer;
begin
sL := TStringList.Create;
try
ix := 2 * Pred(dialog.FilterIndex);
ExtractStrings(['|'], [], PChar(dialog.Filter), sL);
result := dialog.FileName + Copy(sL[ix], 2, Length(sL[ix]) - 1)
finally
sl.Free;
end;
end;

procedure TForm1.SaveDialog1CanClose(Sender: TObject; var CanClose: Boolean);
begin
if FileExists(GetFullName(SaveDialog1)) then begin
CanClose := MessageBox(0, PChar('Вы уверены, что хотите перезаписать файл?'), PChar('Warning'),
MB_YESNO or MB_ICONEXCLAMATION or MB_DEFBUTTON2) = mrYes;
end;
end;
, тогда если будет введено имя существующего файла, ты получишь запрос, хочешь ли его перезаписать. И пока не подтвердишь перезапись или не введешь имя несуществующего файла, диалог не закроется...
Client
Спасибо!
Пока буду дальше делать
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.