如何将OnComplete事件添加到bitmap.SaveToFile('img.bmp');

时间:2009-09-13 20:17:27

标签: delphi

我希望在我的位图完全保存后暂停我的应用程序?

2 个答案:

答案 0 :(得分:7)

除非你在一个单独的线程中调用该方法,否则我相当确定它将在方法返回时完全保存:

  bitmap.SaveToFile(..);
  // file is completely saved at this point

是什么导致您相信此时 已完全保存?

唯一的皱纹可能是“懒惰写入”Windows本身可能尚未完成将文件物理写入光盘的业务,但就您的应用程序(或任何其他应用程序)而言,这是无关紧要的。如果您在Windows完成将其提交到光盘之前尝试访问该文件,该应用程序将“阻止”直到它可以安全地访问该文件,但您不需要专门处理它,它“只是工作”。

答案 1 :(得分:0)

如果要干净地暂停应用程序,可以选择以下几种方法:

1)关闭主表格。当您关闭主窗体时,应用程序将关闭。

procedure TForm1.SaveAndClose(Filename:String);
begin
  Bitmap.SaveToFile(filename);
  Application.Mainform.Close;
end;

2)致电 Application.Terminate 。这会突然关闭您的应用程序,但会运行任何终结代码。通常在应用程序收到WM_Quit消息或主窗体关闭时调用它。

procedure TForm1.SaveAndClose(Filename:String);
begin
  Bitmap.SaveToFile(filename);
  Application.Terminate;
end;

3)将 wm_Close 发布到您的应用程序/主表单。这具有额外的优点,即处理应用程序队列中的任何其他消息。它相当于按下CTRL-F4或按下主窗体右上角的“X”。唯一的问题是,如果消息队列已满,则可能无法访问该表单(罕见)。

procedure TForm1.SaveAndClose(Filename:String);
begin
  Bitmap.SaveToFile(filename);
  postMessage(Application.MainForm,wm_close,0,0):
end;

4)调用暂停(ExitCode:Integer)。这有点极端,将终止应用程序。终结代码仍将运行,但不保证释放内存。您可以选择设置退回代码,退回代码将返回给调用应用程序。

procedure TForm1.SaveAndClose(Filename:String);
begin
  Bitmap.SaveToFile(filename);
  Halt(0);
end;