gpt4 book ai didi

delphi - TSaveDialog 文件扩展名和 [ofOverwritePromt] 问题

转载 作者:行者123 更新时间:2023-12-03 14:46:23 25 4
gpt4 key购买 nike

已经有一个关于 TSaveDialog 和 [ofOverwritePromt] 的简单问题,位于 Delphi overwrite existing file on save dialog .

所以我的问题/场景如下:

  • 我有一个TSaveDialog
  • 我在选项中设置了[ofOverwritePromt]
  • 我将过滤器设置为“PDF (*.pdf)|*.pdf”
  • 过滤器索引设置为 1

现在我执行程序并调用对话框。如果我使用鼠标或键盘(无需键入)选择的文件存在,则保存对话框会要求我用以下消息覆盖:

save dialog

但是,如果我执行相同的操作,但键入“测试”等文件名而不指定扩展名,则保存对话框不会确认覆盖。我知道实际上它返回另一个文件名“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;

有没有办法在不自定义标准对话框的情况下实现更优雅的效果?

最佳答案

我的猜测是您没有设置 DefaultExt,这就是您返回空白扩展名的原因。使用此属性,您将不会遇到问题。如果您使用多个过滤器,请使用 OnFilterChange 事件。这是一种方法:

procedure TFormMain.SigSaveDialogMainTypeChange(Sender: TObject);
begin
case (Sender as TSaveDialog).FilterIndex of
0: (Sender as TSaveDialog).DefaultExt := 'pdf';
1: (Sender as TSaveDialog).DefaultExt := 'txt';
end;
end;

这也意味着您不必检查扩展名并更改它!

关于delphi - TSaveDialog 文件扩展名和 [ofOverwritePromt] 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39016662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com