我写了一段代码,有点问题,能帮我看一下吗,看看问题在哪儿?(100分)

  • 主题发起人 主题发起人 qn-wl
  • 开始时间 开始时间
Q

qn-wl

Unregistered / Unconfirmed
GUEST, unregistred user!
程序的要求是:
1.当程序第一次运行后,你若关闭它,则出现一个警告框后再关闭它。
2.当程序已经运行了,再次运行一遍时,则将其中一个程序关闭,
但不要出现警告框直接关闭。
3.关闭代码放在form1.FormDestroy事件中

var
w1,w2,w3:integer;
implementation

{$R *.DFM}

function enumwinproc(handle:hwnd;param:longint):boolean;
stdcall;
var
sz:array[0..132] of char;
begin
result:=true;
if getwindowtext(handle,sz,sizeof(sz))<>0 then
begin
if strpas(sz)='appclose' then
begin
if w1=0 then w1:=handle else w2:=handle;
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//判断当前程序是否只有一个在运行
w1:=0;w3:=0;
enumwindows(@enumwinproc,0);
if (w1<>0) and (w2<>0) then
begin
w3:=1;//判断是否在FormDestroy出现警告框的标记,等于1则不出现
sendmessage(w2,wM_close,0,0);
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if w3<>1 then
begin
application.messagebox('关闭','警告',48);
end;
end;

end.

 
1.把“判断当前程序是否只有一个在运行”的 code 放在
Application.Initialize; 之后, Application.CreateForm 之前
并用Halt结束程序。
2.把“关闭代码”放在OnQueryClose事件中,设置CanClose。
 
直接在程序启动的时候判断时候已经有相同的进程运行不就行了?
如果已经有运行,则Application.Terminate.
 
to:xkliu,bubble
我的代码运行后也没出错,但是当程序第二次运行后,按要求会直接关闭,但不出现警告
框,可是却出现了
或者是程序可以多次运行,而警告框却不出来。
总之达不到我的要求。
能否麻烦两位把你们的代码贴一下,或者帮我改改。
谢谢!
 
问题解决了,发分了!!
 
1.当程序第一次运行后,你若关闭它,则出现一个警告框后再关闭它。
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Application.MessageBox('您确定要关闭吗 ? ','询问',MB_OKCANCEL+MB_ICONQUESTION)=IDCANCEL then
CanClose:=false;
end;
 
问题已经解决了,来者有分!
 
同意jrq 的
 
jrq的意思不对吧
 
1.xkliu的方法可行,昨天早上我就解决了
2.DFW好象出错了,我已经分了分,怎么现在还要我发分????
 
发分了!!
 
问题解决了,发分了!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部