完成了一个进销存系统,现在想在用户登录后,像有些程序那样,从右下角升起一个小窗口,里面是一些告警信息,类似库存不足等等,
感觉无从下手,请大家给点建议,谢谢!

解决方案 »

  1.   

    很简单,创建一个窗体,定时设置其top属性,一点点增加,看起来就是那个效果
      

  2.   

    CNPACK里找个仿FoxMail MSG 的窗体源码看看
      

  3.   


    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.
    给你找了个
      

  4.   

    AnimateWindow(Handle,800,AW_SLIDE Or AW_VER_NEGATIVE);放到窗口Show事件中