2013-02-28 51 views
1

我有一个delphi应用程序,在启动时检查一个进程是否已在运行,如果它正在运行,我将数据传递到该进程并终止当前进程。问题:在终止当前进程时,应用程序的窗口在终止前瞬间闪烁。所有的代码都在应用程序初始化中,甚至在创建主窗体之前,所以我不明白它如何在瞬间显示窗体。我尝试过无数东西,比如让窗户看不见,似乎什么都不起作用。有什么我做错了吗?终止前的显示窗口

+3

由于您的问题依赖于此,请向我们展示代码。 – jachguate 2013-02-28 16:13:43

+1

> *“有什么我做错了吗?”*>很可能。 – 2013-02-28 18:23:20

回答

2

你显然不会很快终止。我会做这样的事情

program Project1; 

uses 
    Forms, 
    Windows, 
    Unit1 in 'Unit1.pas' {Form1}; 

{$R *.res} 

function PrevInstance: boolean; 
begin 
    ... 
end; 

procedure PassData; 
begin 
    ... 
end; 

begin 

    if PrevInstance then 
    begin 
    PassData; 
    Exit; 
    end; 


    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    Application.CreateForm(TForm1, Form1); 
    Application.Run; 
end. 

更新:我相信你做这样的事情

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs; 

type 
    TForm1 = class(TForm) 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure MyInitProc; 
begin 
    if true then Application.Terminate; 
end; 

initialization 
    InitProc := @MyInitProc; 

end. 

这将的工作,因为Application.Terminate不会立即终止应用程序。相反,它只是posts a WM_QUIT message。此消息将在所有初始化完成后收到并执行。

+0

我想你也可以用'Halt'来代替'Application.Terminate',但我认为这很糟糕(过于激进)。 – 2013-02-28 13:54:37