先看效果:
设计界面也很简单:
下面这个是个From,不是Frame.把它的边框设置为none,然后position设置在父级中央或者桌面中央,看个人喜欢吧.加个label,弯角搞一搞,其他也搞得好看一点.这里推荐SC组件.然后加个计时器.这里说一下定时器的interval属性,时间越长,越显得卡顿,上面是1000的效果,后来我改成了300,发现就比上面的效果好很多.
按钮的事件也要说一下,显示模式用show就行了,不要用showmodal
uses FrmMsg; procedure TForm1.Button1Click(Sender: TObject); begin var frm:=TuFrmMsg.Create(self); //注意与position配合 frm.Show; //在定时器里释放内存 end;
unit FrmMsg; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, scControls, scGPControls, Vcl.ExtCtrls; type TuFrmMsg = class(TForm) scGPLabel1: TscGPLabel; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } FStartTime: Cardinal; //私有变量 FDuration: Cardinal; //私有变量 public { Public declarations } end; var uFrmMsg: TuFrmMsg; implementation {$R *.dfm} procedure TuFrmMsg.FormCreate(Sender: TObject); begin Timer1.Enabled:=True; AlphaBlend := True; AlphaBlendValue := 0; AnimateWindow(Handle, 200, AW_BLEND); FDuration:=5000; //设置显示时间,这里设置5秒 end; procedure TuFrmMsg.Timer1Timer(Sender: TObject); begin // 计算已经显示的时间 if GetTickCount - FStartTime >= FDuration then begin // 如果已经显示了足够长的时间,则关闭窗口 AlphaBlendValue := 0; AnimateWindow(Handle, 200, AW_BLEND or AW_HIDE); Timer1.Enabled := False; Release; self.Free; end else begin // 否则,根据已经显示的时间和总显示时间计算透明度 AlphaBlendValue := MulDiv(GetTickCount - FStartTime, 255, FDuration); end; end; end.
标签:end,Sender,淡入淡出,delphi,Vcl,TObject,TuFrmMsg,提示框,procedure From: https://www.cnblogs.com/yoooos/p/17353753.html