delphi 仿一下手机端淡入淡出的信息提示框

先看效果:

 窗体边框设置为BorderStyle:bsNone,显示位置为Position:poOwnerFormCenter.调整成合适的大小.

我封装成了一个函数.这样消息窗口就纯粹就是一个模板了,里面没有任何代码,所有功能都可以写在DM或者其他窗体中,当调用时,直接调用这个函数就可以了

 补充:考虑到消息内容有长有短,为了让内容能完整的显示出来,我们需要设置一下scGPLabel1.

一.AutoSize:True

二.Algin:AlLeft(为什么?想一下).

三.Alginment:taCenter(水平居中)

四.VertAlginment: scvtaCenter(垂直居中)

五.FrameWidth: 0

字体,弯角和颜色自己搞一搞然后在装载完内容后,设置消息窗口的宽度=scGPLabel1的宽度.(弯角有点缺陷,请看到最后的补充)

procedure ShowMessageFadeOut(const AMsg: string; const ADuration: Cardinal);
begin
  var BForm := TForm2.Create(Application);  // TForm2消息窗口,这里要改成你的名字,这里可以用application和nil
  try
    var LabelMsg := BForm.scGPLabel1;   //用来装载与展示消息
    LabelMsg.Caption := AMsg;          //装载
    BForm.Width := LabelMsg.Width;; // 窗口宽度根据内容长度设置宽度
    BForm.Show;        //展示,不要用showmodal模式
    AnimateWindow(BForm.Handle, 200, AW_BLEND);  //这是API函数,用来设置窗体的动画效果
    var StartTime := GetTickCount;
    while GetTickCount - StartTime < ADuration do
    begin
      BForm.AlphaBlendValue := MulDiv(GetTickCount - StartTime, 255, ADuration);//设置窗体透明度
      Application.ProcessMessages;
    end;
    BForm.AlphaBlendValue := 0;
    AnimateWindow(BForm.Handle, 200, AW_BLEND or AW_HIDE);   //这是API函数,用来设置窗体的动画效果
  finally
    BForm.Free;
  end;
end;

 该函数接收两个参数,分别是要显示的消息和显示时间(单位为毫秒)。在函数中,首先创建一个消息窗口对象,然后通过消息窗口对象找到TscGPLabel组件,设置其Caption属性为要显示的消息,接着使用循环计算透明度,直到达到指定的显示时间后关闭窗口。最后,释放消息窗口对象。

BForm.AlphaBlendValue := MulDiv(GetTickCount - StartTime, 255, ADuration):将计算出的透明度值赋值给窗口的AlphaBlendValue属性,从而实现透明度的淡入淡出效果。 例如,如果ADuration为5000,即窗口淡入淡出的总时间为5秒,而当前时间点为2.5秒(即从StartTime开始经过了2.5秒),那么计算出的透明度值为127(即255*2.5/5),此时窗口的透明度就是半透明状态。

Application.ProcessMessages;

这句代码是用来处理消息队列的,它的作用是让程序在等待窗口淡入淡出完成的过程中能够响应用户的其它操作,比如点击鼠标、按下键盘等,从而使程序看起来更加流畅,避免出现无响应的情况。

 

2023-05-05补充:

在调用窗体有设置为顶层窗口的情况下,提示框会被挡在后面,所以这个提示窗体的FormStrle要设置为fsStayOnTop才行,同时我也发现,背景色不为白色的时候,弯角就会暴露出来,所以搞不搞弯角,请各位自己决定吧.

 

posted @ 2023-04-25 20:24  一曲轻扬  阅读(369)  评论(0)    收藏  举报