关于 TSaveDialog 和 Delphi 的 [ofOverwritePromt] 的想法已经有一个简单的问题覆盖现有文件 on save dialog。
所以我的问题/场景如下:
- 我有一个
TSaveDialog
- 我设置
[ofOverwritePromt]
了Options
- 我将过滤器设置为“PDF (*.pdf)|*.pdf”
- 过滤器索引设置为 1
所以现在我执行程序并调用对话框。如果我选择 WITH MOUSE 或 KEYBOARD(不输入)的文件存在,则保存对话框会要求我用以下消息覆盖:
但是,如果我执行相同的操作,但在没有指定扩展名的情况下键入“Test”之类的文件名,则保存对话框不会确认覆盖。我知道它实际上返回另一个文件名“C:\Users\xxx\Desktop\Test”而不是“C:\Users\xxx\Desktop\Test.pdf”。如果对话框要求您保存文件,这有点不太好,但您需要输入扩展名。所以通常我会这样处理:
repeat
{ Ask for the file if not silent }
if not dlgSave.Execute then
Exit;
{ Read the filename from the save dialog }
LTempFile := dlgSave.FileName;
if not SameText(ExtractFileExt(LTempFile), '.pdf') then
begin
{ Add the extension }
LTempFile := LTempFile + '.pdf';
{ As we bypassed the overwrite check in dialog do it now }
if FileExists(LTempFile) then
if MsgWarn(Format('%s already exists. Replace?', [ExtractFileName(LTempFile)]), mbOKCancel) <> mrOk then
Continue;
end;
Break;
until False;
有没有办法在不自定义标准对话框的情况下更优雅地做到这一点?