制作从屏幕右下角逐渐弹出的消息提示框

2016-02-19 16:22 14 1 收藏

今天图老师小编要向大家分享个制作从屏幕右下角逐渐弹出的消息提示框教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - 编程语言 】

微软的每一个产品,无论功能还是界面设计都会带给我们一定的惊喜,比如OfficeXP、Office2003、Messenger的界面设计,早已成为众多软件竞相模仿的对象,就拿Messenger来说,我就见过好几套网络视频会议的软件都借鉴了它的界面风格。
  前段时间因为要在原来的软件上增加一个快捷键提示窗体,这个提示窗要求在显示的时候比较醒目美观能引起用户注意,显示后不影响用户操作,能够关掉。很自然的就想到了Messenger那个从屏幕右下角逐渐弹出的消息提示窗体,不过相对Messenger我更喜欢QQ2004奥运版的配色风格,反正都是偷就多偷点吧,下面快捷键提示窗的最终效果:
  
  
  这个窗体有以下几个特点:
  1、显示的时候是从屏幕右下角逐渐弹出的;
  2、它是个无标题窗体,但它必须允许用户移动和改变大小,因此要用到无标题窗体拖动、改变大小的技术;
  3、它是个不规则的窗体,主要是左上角和右上角是圆形导角,因此要为窗体创建外形,且窗体改变大小时必须重建;
  4、它标题和内容显示区都有渐层色,标题还有几个小点点,在实现时使用取巧的方法,直接利用截图进行填充。
  
  当然界面可以偷,代码就得老老实实的写的了,下面是界面设计图和实现代码:
  
  
  
 界面formPSHotKey.frm内容 [内容较长,请点击此处找开/折叠]

  object frmPSHotKey: TfrmPSHotKey
    Left = 192
    Top = 107
    BorderStyle = bsNone
    Caption = '快捷键提示'
    ClientHeight = 168
    ClientWidth = 343
    Color = clWhite
    Constraints.MinWidth = 350
    Font.Charset = GB2312_CHARSET
    Font.Color = clWindowText
    Font.Height = -12
    Font.Name =
'宋体'
  
  Font.Style = []
    FormStyle = fsStayOnTop
    OldCreateOrder = False
    OnCreate = FormCreate
    OnPaint = FormPaint
    OnResize = FormResize
    DesignSize = (
      343
      168)
    PixelsPerInch = 96
    TextHeight = 12
    object imgTitleBar: TImage
      Left = 0
      Top = 0
      Width = 343
      Height = 12
      Cursor = crSizeAll
      Align = alTop
      AutoSize = True
      Center = True
      Picture.Data =
{
        07544269746D6170EE010000424DEE010000000000006E000000280000003900
        00000C000000010004000000000080010000120B0000120B00000E0000000E00
        0000D79D8B00A83A1700F8E6D600C9775E00F6DFCB00FAEDE200F4D7BE00F5DA
        C200EAD2BF00FCF5EE00FEFBF800BE796B00FFFFFF0000000000BBBBBBBBBBBB
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB000D0D0888888888888
        888888888888888888888888888888888888888888888000BBBB666666666666
        6666666666666666666666666666666666666666666660008888777777777777
        777777777777777777777777777777777777777777777000666644CC44CC44CC
        44CC44CC44CC44CC44CC44CC44CC44CC44CC44CC44CC40007777231C231C231C
        231C231C231C231C231C231C231C231C231C231C231C200044CC503550355035
        503550355035503550355035503550355035503550355000231C999999999999
        9999999999999999999999999999999999999999999990005035AAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0009999CCCCCCCCCCCC
        CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC000AAAABBBBBBBBBBBB
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB000CCCCBBBBBBBBBBBB
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB000BBBB}
  
    OnMouseDown = imgTitleBarMouseDown
      OnMouseMove = imgTitleBarMouseMove
    end
    object imgTitleBarBG: TImage
      Left = 248
      Top = 32
      Width = 7
      Height = 12
      AutoSize = True
      Picture.Data =
{
        07544269746D617092000000424D920000000000000062000000280000000700
        00000C000000010004000000000030000000120B0000120B00000B0000000B00
        0000F4D7BE00F8E6D600F6DFCB00F5DAC200EAD2BF00FCF5EE00FEFBF800FAED
        E200BE796B00FFFFFF0000000000888888804444444000000000333333302222
        222011111110777777705555555066666660999999908888888088888880}
  
    Visible = False
    end
    object imgShapeBG: TImage
      Left = 280
      Top = 48
      Width = 3
      Height = 56
      AutoSize = True
      Picture.Data =
{
        07544269746D6170DA010000424DDA01000000000000FA000000280000000300
        0000380000000100080000000000E0000000120B0000120B0000310000003100
        000000000000FFFFFF00FFFCFC00FFFDFD00FFF9F800FFFAF900FFFBFA00FFF6
        F300FFF7F400FFF9F700FFFCFB00FFF0EA00FFF3EE00FFF5F100FFFAF800FFE5
        D900FFE7DC00FFE9DF00FFEBE200FFEDE500FFEEE600FFEFE800FFF0E900FFF2
        EC00FFF4EF00FFF6F200FFF8F500FFE5D800FFE6D900FFE6DA00FFE7DB00FFE8
        DC00FFE8DD00FFE9DE00FFEAE000FFEBE100FFECE300FFEDE400FFEFE700FFF1
        EA00FFF3ED00FFF5F000FFF7F300FFF9F600FFFBF900FFFDFC00FFE9DD00FFEC
        E200FFF2EB001B1B1B000F0F0F001C1C1C001D1D1D001D1D1D001E1E1E001E1E
        1E00101010001F1F1F00202020002E2E2E002121210011111100222222002222
        220023232300121212002F2F2F00242424002525250013131300141414001414
        14002626260015151500161616000B0B0B002727270030303000171717002828
        28000C0C0C001818180018181800292929000D0D0D0019191900070707002A2A
        2A00080808001A1A1A001A1A1A002B2B2B0009090900040404000E0E0E000505
        05002C2C2C0006060600060606000A0A0A000A0A0A00020202002D2D2D000303
        030003030300}
  
    Visible = False
    end
    object SpeedButton1: TSpeedButton
      Left = 323
      Top = 16
      Width = 14
      Height = 14
      Anchors = [akTop, akRight]
      Flat = True
      Glyph.Data =
{
        8A000000424D8A00000000000000420000002800000009000000090000000100
        04000000000048000000120B0000120B00000300000003000000BE604200FFFF
        FF00000000001111111110000200100111001000111110001000100010011100
        0001100010001110001110001100110000011000111010001000100011001001
        1100100010001111111110001001}
  
    OnClick = SpeedButton1Click
    end
    object Label1: TLabel
      Left = 16
      Top = 24
      Width = 60
      Height = 12
      Caption =
'快捷键提示'
  
    Font.Charset = GB2312_CHARSET
      Font.Color = clWindowText
      Font.Height = -12
      Font.Name =
'宋体'
  
    Font.Style = []
      ParentFont = False
      Transparent = True
    end
    object Label2: TLabel
      Left = 16
      Top = 99
      Width = 294
      Height = 12
      Caption =
'A:光标在“编号”列时,切换数据类型为“步骤类型”'
  
    Transparent = True
    end
    object Label3: TLabel
      Left = 16
      Top = 118
      Width = 318
      Height = 12
      Caption =
'B:光标在“编号”列时,切换数据类型为“工艺要求类型”'
  
    Transparent = True
    end
    object Label4: TLabel
      Left = 16
      Top = 138
      Width = 294
      Height = 12
      Caption =
'C:光标在“编号”列时,切换数据类型为“用料类型”'
  
    Transparent = True
    end
    object Label5: TLabel
      Left = 16
      Top = 42
      Width = 132
      Height = 12
      Caption =
'Alt+↓:打开下拉列表框'
  
    Transparent = True
    end
    object Label6: TLabel
      Left = 16
      Top = 61
      Width = 108
      Height = 12
      Caption =
'Ctrl+Ins:插入一行'
  
    Transparent = True
    end
    object Label7: TLabel
      Left = 16
      Top = 80
      Width = 120
      Height = 12
      Caption =
'Ctrl+Del:删除当前行'
  
    Transparent = True
    end
    object Label8: TLabel
      Left = 174
      Top = 42
      Width = 138
      Height = 12
      Caption =
'Ins:打开“工艺名称表”'
  
    Transparent = True
    end
    object Label9: TLabel
      Left = 174
      Top = 61
      Width = 90
      Height = 12
      Caption =
'F11:插入“℃”'
  
    Transparent = True
    end
    object Label10: TLabel
      Left = 174
      Top = 80
      Width = 90
      Height = 12
      Caption =
'F12:插入“′”'
  
    Transparent = True
    end
    object Label11: TLabel
      Left = 0
      Top = 165
      Width = 343
      Height = 3
      Cursor = crSizeNS
      Align = alBottom
      AutoSize = False
      Transparent = True
      OnMouseDown = Label11MouseDown
      OnMouseMove = Label11MouseMove
    end
    object Label12: TLabel
      Left = 0
      Top = 12
      Width = 3
      Height = 153
      Cursor = crSizeWE
      Align = alLeft
      AutoSize = False
      Transparent = True
      OnMouseDown = Label12MouseDown
    end
    object Label13: TLabel
      Left = 340
      Top = 12
      Width = 3
      Height = 153
      Cursor = crSizeWE
      Align = alRight
      AutoSize = False
      Transparent = True
      OnMouseDown = Label13MouseDown
    end
  end
  

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/) 代码formPSHotKey.pas内容 unit formPSHotKey;
  
  interface
  
  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ExtCtrls, StdCtrls, Buttons;
  
  

  {========================================================================
    DESIGN BY :  彭国辉
    DATE:        2004-10-28
    SITE:       
http://kacarton.yeah.net/
    BLOG:        http://blog.csdn.net/nhconch
    EMAIL:       kacarton@sohu.com

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

    文章为作者原创,转载前请先与本人联系,转载请注明文章出处、保留作者信息,谢谢支持!
  =========================================================================}
  

  type
    TfrmPSHotKey = class(TForm)
      imgTitleBar: TImage;
      imgTitleBarBG: TImage;
      imgShapeBG: TImage;
      SpeedButton1: TSpeedButton;
      Label1: TLabel;
      Label2: TLabel;
      Label3: TLabel;
      Label4: TLabel;
      Label5: TLabel;
      Label6: TLabel;
      Label7: TLabel;
      Label8: TLabel;
      Label9: TLabel;
      Label10: TLabel;
      Label11: TLabel;
      Label12: TLabel;
      Label13: TLabel;
      procedure FormPaint(Sender: TObject);
      procedure imgTitleBarMouseDown(Sender: TObject; Button: TMouseButton;
        Shift: TShiftState; X, Y: Integer);
      procedure FormCreate(Sender: TObject);
      procedure SpeedButton1Click(Sender: TObject);
      procedure Label11MouseDown(Sender: TObject; Button: TMouseButton;
        Shift: TShiftState; X, Y: Integer);
      procedure FormResize(Sender: TObject);
      procedure Label12MouseDown(Sender: TObject; Button: TMouseButton;
        Shift: TShiftState; X, Y: Integer);
      procedure Label13MouseDown(Sender: TObject; Button: TMouseButton;
        Shift: TShiftState; X, Y: Integer);
      procedure imgTitleBarMouseMove(Sender: TObject; Shift: TShiftState; X,
        Y: Integer);
      procedure Label11MouseMove(Sender: TObject; Shift: TShiftState; X,
        Y: Integer);
    private
      { Private declarations }
    public
     
 { Public declarations }
  
  end;
  
  var
    frmPSHotKey: TfrmPSHotKey;
  
  implementation
  
  {$R *.dfm}
  
  procedure TfrmPSHotKey.FormCreate(Sender: TObject);
  begin
      Tag := Height;
      Height := 16; 
      //定位到屏幕右下角
      Top := Screen.Height - 40;
      Left := Screen.Width - Width - 2;
      Show; 
      //从屏幕右下角逐渐弹出
      while HeightTag do begin
          Height := Height + 5;
          Top := Top - 5;
          Update;
          Application.ProcessMessages;
          Sleep(10);
      end;
      Height := Tag;
      Tag := 0;
      Color := $F4BA9D;
      FormResize(Sender);
  end;
  
  procedure TfrmPSHotKey.FormPaint(Sender: TObject);
  var
      i: integer;
      rgn: HRGN;
      r: TRect;
  begin
      with Canvas do begin 
          //利用imgTitleBarBG绘制标题背景
          for i:=0 to ClientWidth div imgTitleBarBG.Width do
              Draw(i*imgTitleBarBG.Width, 0, imgTitleBarBG.Picture.Bitmap);
          if Tag0 then Exit;  //如果窗体正在弹出状态,不绘制内容面板背景
  
        //绘制内容面板背景
          SetRect(r, 5, 15, Width-5, Height-5);
          StretchDraw(r, imgShapeBG.Picture.Bitmap);
          Pen.Color := $C97F55;
          Brush.Style := bsClear;
          RoundRect(r.Left, r.Top, r.Right, r.Bottom, 6, 6); 
          //绘制窗体边框
          rgn := CreateRectRgn(0,0,0,0);
          GetWindowRgn(Self.Handle, rgn);
          Brush.Color := $BE796B;
          windows.FrameRgn(Handle, rgn, Brush.Handle, 2, 2);
          DeleteObject(rgn);
      end;
  end;
  
  procedure TfrmPSHotKey.imgTitleBarMouseDown(Sender: TObject;
    Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin 
      //在标题按下鼠标键时,允许移动窗体或改变窗体大小
      ReleaseCapture;
      if X  5 then Perform(WM_SYSCOMMAND, $F004, 0)
      else if X  Width - 5 then Perform(WM_SYSCOMMAND, $F005, 0)
      else if Y  3 then Perform(WM_SYSCOMMAND, $F003, 0)
      else Perform(WM_SYSCOMMAND, $F012, 0);
  end;
  
  procedure TfrmPSHotKey.FormResize(Sender: TObject);
  var
      rgn, rgn2: HRGN;
  begin
      if Tag0 then Exit; 
      //窗体改变大小时重建Rgn
      rgn := CreateRoundRectRgn(0, 0, Width+1, Height, 4, 4);
      rgn2 := CreateRectRgn(0, 11, Width, Height);
      CombineRgn(rgn, rgn, rgn2, RGN_OR);
      SetWindowRgn(Handle, rgn, True);
      DeleteObject(rgn);
      DeleteObject(rgn2);
      Invalidate;
  end;
  
  procedure TfrmPSHotKey.SpeedButton1Click(Sender: TObject);
  begin
      Close;
  end;
  
  //以下几个Label用来改变窗体大小
  procedure TfrmPSHotKey.Label11MouseDown(Sender: TObject;
    Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin
      ReleaseCapture;
      if X  5 then Perform(WM_SYSCOMMAND, $F007, 0)
      else if X  Width - 5 then Perform(WM_SYSCOMMAND, $F008, 0)
      else Perform(WM_SYSCOMMAND, $F006, 0);
  end;
  
  procedure TfrmPSHotKey.Label12MouseDown(Sender: TObject;
    Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin
      ReleaseCapture;
      Perform(WM_SYSCOMMAND, $F001, 0);
  end;
  
  procedure TfrmPSHotKey.Label13MouseDown(Sender: TObject;
    Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin
      ReleaseCapture;
      Perform(WM_SYSCOMMAND, $F002, 0);
  end;
  
  //下面代码判断鼠标所在位置,并改变鼠标光标,提示用户可以拖动窗体或改变大小
  procedure TfrmPSHotKey.imgTitleBarMouseMove(Sender: TObject;
    Shift: TShiftState; X, Y: Integer);
  begin
      if X  5 then imgTitleBar.Cursor := crSizeNWSE
      else if X  Width - 5 then imgTitleBar.Cursor := crSizeNESW
      else if Y  3 then imgTitleBar.Cursor := crSizeNS
      else imgTitleBar.Cursor := crSizeAll;
  end;
  
  procedure TfrmPSHotKey.Label11MouseMove(Sender: TObject;
    Shift: TShiftState; X, Y: Integer);
  begin
      if X  5 then Label11.Cursor := crSizeNESW
      else if X  Width - 5 then Label11.Cursor := crSizeNWSE
      else Label11.Cursor := crSizeNS;
  end;
  
  end.

来源:http://www.tulaoshi.com/n/20160219/1611849.html

延伸阅读
360手机助手关闭右下角气泡自动弹出的方法 A:当用户的手机连接电脑时,右下角会出现气泡提示,气泡提示默认状态下是自动开启的,如果您想关闭,即可勾选不再提醒,如下图所示: B: 在360手机助手主界面的右上角选择设置,然后选择常规设置,将气泡提醒设置里的设置连接时气泡提醒的勾选去掉,即可关闭气泡提醒,如下图所示:
标签: 电脑入门
破解版虽然激活,但不完美的情况下右下角会出现未激活的水印,可尝试以下方法 方法一: 开机自动去除Win8未激活水印: 1、新建立个快捷方式 – 输入 cmd.exe /c taskkill.exe /f /im explorer.exe && start explorer.exe 2、把快捷方式丢到开机自启动目录 3、开机启动目录:C:ProgramDataMicrosoftWindowsStart MenuProgram...
 第一步,用鼠标有键在电脑任务栏点击一下,打开属性。   第二步:显示任务栏和开始菜单属性。   第三步:在任务栏里面,点击自定义。   第四步:显示自定义通知,在里面选择一个正在使用的软件,在行为一栏里点击...
标签: 浏览器
怎么去掉桌面右下角的chrome通知图标?   不知道怎么回事,就安装上了一个插件,启用了chrome通知。在Windows桌面右下角的任务栏上,鼠标右键此图标却没发现关闭和删除的选项。 那么如何去掉桌面右下角的chrome通知图标呢? 1、打开chrome浏览器,在地址栏输入chrome://flags/; 2、找到启用丰富通知,使用Ctrl+F然后...
MSN怎么最小化到右下角?   其实这个主要是微软自家的Windows Live Messenger也就是MSN没有完好的兼容windows7,所以默认Windows Live  Messenger 的图标不会最小化到托盘区,其实只需要一个小小的修改就可以实现这个功能了 具体操作如下: 如果 Windows Live Messenger 正开着, 先将其关掉; 然后鼠标点击你之前...

经验教程

127

收藏

82
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部