如何实现这样的告警窗口?

woshizhaoxuhui 2010-03-15 03:43:09
完成了一个进销存系统,现在想在用户登录后,像有些程序那样,从右下角升起一个小窗口,里面是一些告警信息,类似库存不足等等,
感觉无从下手,请大家给点建议,谢谢!
...全文
224 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
starluck 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kv2002 的回复:]
CNPACK里找个仿FoxMail MSG 的窗体源码看看
[/Quote]



同用.
射天狼 2010-03-16
  • 打赏
  • 举报
回复
AnimateWindow(Handle,800,AW_SLIDE Or AW_VER_NEGATIVE);

放到窗口Show事件中
jdngz 2010-03-15
  • 打赏
  • 举报
回复
递增 hight,top 值
贝隆 2010-03-15
  • 打赏
  • 举报
回复
学习。。。。。。。。。。。
InceptKnowledge 2010-03-15
  • 打赏
  • 举报
回复

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, XPMan, Buttons, StdCtrls;

type
TForm2 = class(TForm)
Timer1: TTimer;
SpeedButton1: TSpeedButton;
XPManifest1: TXPManifest;
Edit1: TEdit;
procedure Timer1Timer(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure CreateParams(var Params: TCreateParams); override;
procedure FormResize(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
ShowBeginTime: TDateTime;
public
{ Public declarations }
Step: Integer;
end;

var
Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
with Params do begin
EXStyle := EXStyle or WS_EX_TOPMOST or WS_EX_NOACTIVATE;
wndParent := GetDesktopWindow;
end;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
case Step of

1: begin
Self.Top := Self.Top - 1; Self.Height := Self.Height + 1;
Self.Left := Screen.WorkAreaWidth - Self.Width - 1;
if Self.Top <= Screen.WorkAreaHeight - 180 then begin
Canvas.MoveTo(Self.Width - 1, Self.Height - 1);
Canvas.LineTo(0, Self.Height - 1);
ShowBeginTime:=Now;
Step := 2;
end;
end;
2: begin
Canvas.MoveTo(Self.Width - 1, Self.Height - 1); //添加最下行
Canvas.LineTo(0, Self.Height - 1); //添加最下行
if StrToInt(FormatDateTime('s', Now - ShowBeginTime)) >= 16 then begin
Self.AlphaBlendValue := 255; Step := 3; end;
end;
3: begin
Canvas.MoveTo(Self.Width - 1, Self.Height - 1); //添加最下行
Canvas.LineTo(0, Self.Height - 1); //添加最下行
Self.AlphaBlend := true;
Self.AlphaBlendValue := Self.AlphaBlendValue - 5;
if Self.AlphaBlendValue = 0 then begin
Timer1.Enabled := false; end;
end;

end;

end;
procedure TForm2.FormPaint(Sender: TObject);
begin
Canvas.MoveTo(0, Self.Height - 1);
Canvas.LineTo(0, 0); //绘制左边线
Canvas.LineTo(Self.Width - 1, 0); //绘制上边线
Canvas.LineTo(Self.Width - 1, Self.Height); //绘制右边线
end;

procedure TForm2.FormResize(Sender: TObject);
begin
Self.Repaint;
end;

procedure TForm2.SpeedButton1Click(Sender: TObject);
begin
Self.Close;
end;

procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Timer1.Enabled = false then begin
ReleaseCapture; //无标题窗体移动
SendMessage(Self.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); end; //无标题窗体移动
end;

end.


给你找了个
无条件为你 2010-03-15
  • 打赏
  • 举报
回复
我有完整的代码两个,一是纯代码实现,另是需要安装一个按扭实现,类似QQ消息盒子提示。
SQLDebug_Fan 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
很简单,创建一个窗体,定时设置其top属性,一点点增加,看起来就是那个效果
[/Quote]
对,不过要注意闪烁的问题。
haochin 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
很简单,创建一个窗体,定时设置其top属性,一点点增加,看起来就是那个效果
[/Quote]

我一直都是这样子处理的。
kv2002 2010-03-15
  • 打赏
  • 举报
回复
CNPACK里找个仿FoxMail MSG 的窗体源码看看
jjwang2004 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
很简单,创建一个窗体,定时设置其top属性,一点点增加,看起来就是那个效果
[/Quote]还要递增 hight 值
7年 2010-03-15
  • 打赏
  • 举报
回复
楼上办法不错。
bdmh 2010-03-15
  • 打赏
  • 举报
回复
很简单,创建一个窗体,定时设置其top属性,一点点增加,看起来就是那个效果

5,388

社区成员

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

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