Delphi 7 saveDialog 小问题

时间:2022-09-05 17:58:48
我用SaveDialog保存文件,当文件存在时显示对话框让用户选择覆盖文件还是取消, 这个时候SaveDialog对话框也关闭了,如何让savedialog对话框不关闭,代码如下

if SaveDialog.Execute then
begin
   if FileExiste(SaveDialog.Filename) then  
   begin
      if MessageBox(0, '文件已存在,是否覆盖', 'information', MB_OKCANCEL) = MB_OK then
         Memo1.Lines.SaveToFile(SaveDialog.FileName)                   //此时SaveDialog已经关闭, 当选择取消时候,还得重新打开saveDialog .如何不关闭,可以直接重新在SaveDialog中输入文件名.
     ....
   end;
end;

4 个解决方案

#1



begin
  while SaveDialog1.Execute do
  begin
    if FileExists(SaveDialog1.Filename) then
    begin
      if MessageBox(0, '文件已存在,是否覆盖', 'information', MB_OKCANCEL) = MB_OK then
      begin
        Memo1.Lines.SaveToFile(SaveDialog1.FileName);
        break;
      end;
    end
    else
    begin
      Memo1.Lines.SaveToFile(SaveDialog1.FileName);
      break;
    end;
  end;
end;

这样就可以了

#2



procedure TForm1.Button1Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
    memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.SaveDialog1CanClose(Sender: TObject; var CanClose: Boolean);
begin
  if FileExists(SaveDialog1.FileName) then
    CanClose:=MessageBox(0,'文件已存在,是否覆盖','information',MB_OKCANCEL)=MB_OK;
end;

#3


楼上的方法虽然在存在文件的提示时按取消,能提供再次输入的机会,但是,那个循环实质是再次打开保存对话框的。而楼主的要求是“当选择取消时候,还得重新打开saveDialog . 如何不关闭,可以直接重新在SaveDialog中输入文件名”。

#4


D7不知道,现在直接用XE2了,在Option中有个ofOverwritePromt属性,设置成ture即可

#1



begin
  while SaveDialog1.Execute do
  begin
    if FileExists(SaveDialog1.Filename) then
    begin
      if MessageBox(0, '文件已存在,是否覆盖', 'information', MB_OKCANCEL) = MB_OK then
      begin
        Memo1.Lines.SaveToFile(SaveDialog1.FileName);
        break;
      end;
    end
    else
    begin
      Memo1.Lines.SaveToFile(SaveDialog1.FileName);
      break;
    end;
  end;
end;

这样就可以了

#2



procedure TForm1.Button1Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
    memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.SaveDialog1CanClose(Sender: TObject; var CanClose: Boolean);
begin
  if FileExists(SaveDialog1.FileName) then
    CanClose:=MessageBox(0,'文件已存在,是否覆盖','information',MB_OKCANCEL)=MB_OK;
end;

#3


楼上的方法虽然在存在文件的提示时按取消,能提供再次输入的机会,但是,那个循环实质是再次打开保存对话框的。而楼主的要求是“当选择取消时候,还得重新打开saveDialog . 如何不关闭,可以直接重新在SaveDialog中输入文件名”。

#4


D7不知道,现在直接用XE2了,在Option中有个ofOverwritePromt属性,设置成ture即可