delphi中怎么实现象联众一样定时自动关闭的提示框

iranjn 2007-04-07 12:13:50
如题,最好有代码,通过立即给分
...全文
686 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
nevergetwin 2007-04-10
  • 打赏
  • 举报
回复
加个定时器,很简单
//全局变量i
var
i:integer=20;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if i>0 then
begin
Button1.Caption:=IntToStr(i);
end
else
Form1.Close;
Dec(i);
end;
Comer 2007-04-10
  • 打赏
  • 举报
回复
mark
pengxuan 2007-04-10
  • 打赏
  • 举报
回复
加个Timer,在窗体显示的时候设置Timer的Enable为True
蒋晟 2007-04-09
  • 打赏
  • 举报
回复
the function was introduced in Windows XP
ad_lee 2007-04-09
  • 打赏
  • 举报
回复
楼上的强!
路过.
cyfforever1 2007-04-09
  • 打赏
  • 举报
回复
妈的 难怪delphi不行了 就是你们这些垃圾搞的 自己想想就搞的懂,拿100分来这里晃什么晃
qq77 2007-04-08
  • 打赏
  • 举报
回复
楼主可以参考这篇文章:
http://www.net-bit.com/Article/ShowArticle.asp?ArticleID=492

代码是用VB写的,但转成delphi应该不难
merkey2002 2007-04-08
  • 打赏
  • 举报
回复
to jiangsheng(蒋晟.Net[MVP])
----------

---------------------------
Project1.exe - 无法找到入口
---------------------------
无法定位程序输入点 MessageBoxTimeoutA 于动态链接库 user32.dll 上。
---------------------------
确定
---------------------------

系统win2k pro
liuweimin 2007-04-08
  • 打赏
  • 举报
回复
unit AutoCloseButton;

interface

uses
SysUtils, Classes, StdCtrls,Messages,Windows;

const
M_TIMER=1; //定时器的名字
type
TAutoCloseButton = class(TButton)
private
{ Private declarations }
strCaption:string;
iTickTime:integer; //间隔时间(秒)
bAutoClose:boolean;
FHandle:HWND;
procedure SetAutoClose(value:boolean);
procedure SetTickTime(value: integer);
procedure Timer(var Msg:TWMTIMER);message WM_TIMER;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwer:TComponent);override;
destructor Destroy;override;
published
{ Published declarations }
Property AutoClose: boolean read bAutoClose write SetAutoClose default false;
Property TickTime: integer read iTickTime write SetTickTime default 10;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Welkin', [TAutoCloseButton]);
end;

{ TAutoCloseButton }

constructor TAutoCloseButton.Create(AOwer: TComponent);
begin
inherited Create(AOwer);
iTickTime:=10;
bAutoClose:=false;
end;

destructor TAutoCloseButton.Destroy;
begin
if FHandle<>0 then
KillTimer (FHandle,M_TIMER) ; //销毁定时器
inherited;
end;

procedure TAutoCloseButton.SetAutoClose(value:boolean);
begin
bAutoClose:=value;
if bAutoClose then
begin
//创建一个定时器
FHandle:=Self.Handle;
SetTimer(FHandle,M_TIMER,1000, nil);
strCaption:=Self.Caption;
end
else
begin
KillTimer(FHandle, M_TIMER);
FHandle:=0;
end;
end;

procedure TAutoCloseButton.SetTickTime(value: integer);
begin
if value>=0 then
iTickTime:=value
else
iTickTime:=1;
end;

procedure TAutoCloseButton.Timer(var Msg: TWMTIMER);
begin
//捕获定时器消息
if bAutoClose then
begin
Self.Caption:=strCaption+'('+IntToStr(iTickTime)+')';
if iTickTime<=0 then
begin
KillTimer (FHandle,M_TIMER) ; //销毁定时器
SendMessage(Self.Parent.Handle,WM_CLOSE,0,0);
end;
Dec(iTickTime);
end;
end;

end.
lliihhaaoo 2007-04-08
  • 打赏
  • 举报
回复
// 这个还有进度条的。不想要可以去掉
procedure TForm1.Button1Click(Sender: TObject);
var
AMsgDialog: TForm;
AProgressBar: TProgressBar;
ATimer: TTimer;
begin
AMsgDialog := CreateMessageDialog('Quickly! Answer Yes or No!', mtWarning, [mbYes, mbNo]);
AProgressBar := TProgressBar.Create(AMsgDialog);
ATimer := TTimer.Create(AMsgDialog);
with AMsgDialog do try
Tag := 10; //seconds!

Caption := 'You have 10 seconds';
Height := 150;

with AProgressBar do begin
Name := 'Progress';
Parent := AMsgDialog;
Max := AMsgDialog.Tag; //seconds
Step := 1;
Top := 100;
Left := 8;
Width := AMsgDialog.ClientWidth - 16;
end;

with ATimer do begin
Interval := 1000;
OnTimer := DialogTimer;
end;

case ShowModal of
ID_YES: ShowMessage('Answered "Yes".');
ID_NO: ShowMessage('Answered "No".');
ID_CANCEL: ShowMessage('Time up!')
end; //case
finally
ATimer.OnTimer := nil;
Free;
end;
end;

procedure TForm1.DialogTimer(Sender: TObject);
var aPB: TProgressBar;
begin
if not (Sender is TTimer) then Exit;

if ((Sender as TTimer).Owner) is TForm then
with ((Sender as TTimer).Owner) as TForm do begin
aPB := TProgressBar(FindComponent('Progress'));

if aPB.Position >= aPB.Max then ModalResult := mrCancel
else aPB.StepIt;
end;
end;
蒋晟 2007-04-07
  • 打赏
  • 举报
回复
http://delphi.about.com/od/adptips2004/a/bltip1004_5.htm
constantine 2007-04-07
  • 打赏
  • 举报
回复
弄个图来看看
韩小明 2007-04-07
  • 打赏
  • 举报
回复
建议不要轻易使用线程实现,当然了,如果为了锻炼技术能力,绝对可以。

最好使用窗体,ShowModal的方式来显示,加上定时器。如果需求需要,要使用Show的方式显示的话,要协调好关闭后的事件。
Harryfin 2007-04-07
  • 打赏
  • 举报
回复
原来有现成的API... 学到了.

不过觉得其实自己弄窗体也不错,要多友好有多友好。
yf110 2007-04-07
  • 打赏
  • 举报
回复
加个定时器就可以了
HsWong 2007-04-07
  • 打赏
  • 举报
回复
jiangsheng的不错
要不自己弄个窗体,加个Timer
IDWB 2007-04-07
  • 打赏
  • 举报
回复
show的同时开个线程,线程里就sleep你要的时间,时间到后判断此窗口是否还存在,存在的话关闭。
iranjn 2007-04-07
  • 打赏
  • 举报
回复
我象写的和联众界面那么友好,有倒计时的显示。我记得一起问过,有个大侠给了一个例子但是我记不得存什么地方了所以才发帖子

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧