如何实现这样的告警窗口? 完成了一个进销存系统,现在想在用户登录后,像有些程序那样,从右下角升起一个小窗口,里面是一些告警信息,类似库存不足等等,感觉无从下手,请大家给点建议,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 很简单,创建一个窗体,定时设置其top属性,一点点增加,看起来就是那个效果 CNPACK里找个仿FoxMail MSG 的窗体源码看看 unit Unit2;interfaceuses 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;implementationuses 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.给你找了个 AnimateWindow(Handle,800,AW_SLIDE Or AW_VER_NEGATIVE);放到窗口Show事件中 热心人很多,上贴已结!请教能否自动打开QQ视频请求 stringgrid 将修改后的多行内容提交到数据库 关于复选排队运行程序的实现(再发100分) 编写SQL语句格式化的算法 今天自己尝试做控件!但是不知道为什么我的控件安装完以后在控件面板看不见!请帮帮忙!谢谢! richview问题 我的原创delphi站点 关于fastReport打印位置,调完打印位置为什么直接打印报错(急急急) 子窗体问题 帮忙把下面的代码翻译一下 delphi 运行出现如下错误,确定后光标指在SQL.Clear; teechart简单问题
unit Unit2;interfaceuses
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;implementationuses 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.
给你找了个