采用多线程技术来关闭application.messagebox
【打印文章】
//主要思路:在另个个线程查找到该消息框,然后发WM_CLOSE消息
//为区别是其他的程序的消息框,我在提示的标题上多了一个空格,其实也可以用其他的办法。
//原码如下:
var myclose:tcloseother;
begin
myclose:=tcloseother.Create(false);
myclose.FreeOnTerminate:=true;
application.MessageBox('程序已经运行!','消息提示 ',mb_ok+mb_iconinformation);
end;
unit closeother;
interface
uses
Classes,messages,sysutils,windows,forms;
type
tcloseother = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
public
//procedure create(myhwnd:integer);
end;
implementation
{ Important: Methods and properties of objects in VCL can only be used in a
method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure tcloseother.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ tcloseother }
//procedure tcloseother.create(myhwnd: integer);
//begin
//end;
procedure tcloseother.Execute;
const
NumSec=5; //设置5秒后自动关闭
var
messagehwnd:integer;
starttime:tdatetime;
begin
StartTime := now;
repeat
Application.ProcessMessages;
until Now > StartTime + NumSec * (1/24/60/60);
messagehwnd:=FindWindow(nil,'消息提示 ');
postmessage(messagehwnd,wm_close,0,0);
end;
end.
//为区别是其他的程序的消息框,我在提示的标题上多了一个空格,其实也可以用其他的办法。
//原码如下:
var myclose:tcloseother;
begin
myclose:=tcloseother.Create(false);
myclose.FreeOnTerminate:=true;
application.MessageBox('程序已经运行!','消息提示 ',mb_ok+mb_iconinformation);
end;
unit closeother;
interface
uses
Classes,messages,sysutils,windows,forms;
type
tcloseother = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
public
//procedure create(myhwnd:integer);
end;
implementation
{ Important: Methods and properties of objects in VCL can only be used in a
method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure tcloseother.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ tcloseother }
//procedure tcloseother.create(myhwnd: integer);
//begin
//end;
procedure tcloseother.Execute;
const
NumSec=5; //设置5秒后自动关闭
var
messagehwnd:integer;
starttime:tdatetime;
begin
StartTime := now;
repeat
Application.ProcessMessages;
until Now > StartTime + NumSec * (1/24/60/60);
messagehwnd:=FindWindow(nil,'消息提示 ');
postmessage(messagehwnd,wm_close,0,0);
end;
end.
本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )
【编程爱好者论坛】