首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭,在after后彻底销毁MainForm - Delphi

关闭,在after后彻底销毁MainForm - Delphi
EN

Stack Overflow用户
提问于 2014-07-04 20:57:37
回答 1查看 1.2K关注 0票数 0

我必须为一个exe文件开发一个启动器,但我在关闭主窗体时遇到了一些问题。

我想保持打开可执行文件,但关闭窗体。我成功地执行了应用程序,在.exe打开后,.exe被执行,表单被“关闭”。这几乎就是我想要的,但launcher.exe在windows任务管理器中仍然是活动的。

以下是执行.exe的过程:

代码语言:javascript
复制
procedure TForm2.LancerVersion(aExe: String);
var
  SEInfo: TShellExecuteInfo;

begin
  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  with SEInfo do
  begin 
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := Application.Handle;
    lpFile := PChar(aExe);
    nShow := SW_SHOWNORMAL;
  end;    
  ShellExecuteEx(@SEInfo);
  if Blight then
   begin
    free;
    Close; **//HERE I WOULD LIKE TO CLOSE CLEANLY MY FORM**
   end 
  else
   hide;
end;

这是用于结束的自定义过程:

代码语言:javascript
复制
procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
    if BClose then
    begin
      Canclose := false;
      Bshow := false;
    end;
    Canclose := true; **//IT GOES HERE AFTER CLOSE IS CALLED**
end;

我之所以编写这个自定义过程,是因为有时我只是想在单击X窗口的按钮时,将窗体隐藏在参数函数中的托盘图标中。所以,不要关心第一个条件"if Bclose then“。

我确保将我在FormCreate中创建的FormDestroy中的所有对象都释放出来,但什么也没做,这个过程会持续下去……

如果你能帮我或者只是看看我的问题,我将不胜感激。提前谢谢你..

EN

回答 1

Stack Overflow用户

发布于 2014-07-04 21:16:22

这是一个小的工作SSCCE:

代码语言:javascript
复制
procedure TForm1.Button1Click(Sender: TObject);

var
  SEInfo: TShellExecuteInfo;
  ExecuteFile: string;

begin
  ExecuteFile := 'notepad.exe';
  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  with SEInfo do
  begin
    Wnd := Application.Handle;
    lpFile := PChar(ExecuteFile);
    nShow := SW_SHOWNORMAL;
  end;
  Win32Check(ShellExecuteEx(@SEInfo));
  Close;
end;

问题在于您在过程中调用了Free,请不要这样做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24574912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档