若不是因为你

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

本人所知道两种可以按时间自动关闭的SHOWMESSAGE弹出对话框的方法,现和大家共享一下

1,利用TIMER控件计算时间,FINDWINDOW查找窗体关闭的方法

2,用WINDOWS隐藏API,显示有时间控制功能的SHOWMESSAGE

第一种方法:

 1 procedure TForm1.Button1Click(Sender: TObject);
 2 begin
 3   Timer1.Enabled := True;
 4   ShowMessage('hello world');
 5 end;
 6 
 7 procedure TForm1.Timer1Timer(Sender: TObject);
 8 var
 9   Handle : THandle;
10 begin
11   Handle := FindWindow('TMessageForm', PChar(Application.Title)); //注意FINDWINDOW的第一个参数
12   if Handle > 0 then
13   begin
14     SendMessage(Handle, WM_CLOSE, 00);
15   end;
16   Self.SetFocus;
17   (Sender as TTimer).Enabled := False;   //倒计时时间为TIMER控件的Interval属性
18 end;
19 
20 这种方法比较灵活,也可以使用在MessageBox或者自定义的窗体,只需要知道FINDWINDOW的两个参数就可以了

 

第2种方法

 1 function MessageTimeOut(aCaption, aText : String; Interval : Integer):Boolean;
 2 type
 3   TMsgBoxTimeOut=function(hWnd:HWND;lpText:PChar;lpCaption:PChar;uType:UINT;wLanguageId:WORD;dwMilliseconds:DWORD):Integer;Stdcall;
 4 var
 5   LibHandle : THandle;
 6   MsgForm : TMsgBoxTimeOut;
 7 begin
 8   Result := False;
 9   LibHandle := LoadLibrary('user32.dll');
10   try
11     @MsgForm := GetProcAddress(LibHandle, 'MessageBoxTimeoutA');
12     if not (@MsgForm = nilthen
13     begin
14       Result := True;
15       MsgForm(Application.Handle, PChar(aText), PChar(aCaption), MB_OK, 0, Interval);//参数1是句柄,参数2是标题,参数3是显示的文字内容
16     end;                                                                  //参数4是按钮类型,参数5直接带0,参数6就是结束时间单位是毫秒 
17   finally
18     FreeLibrary(LibHandle);
19   end;
20 end;
21 
22 procedure TForm1.Button2Click(Sender: TObject);
23 begin
24   MessageTimeOut('OK', 'hello world'2000);
25 end;
26 这种方法需要调用user32.dll
27 

 

 

posted on 2010-07-02 13:07  若不是因为你  阅读(809)  评论(0编辑  收藏  举报