|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Prerequisites |
OS restrictions above. |
|
As
with most of Windows' Ex-flavour APIs, FlashWindowEx provides extended
functionality over the older FlashWindow call. Through the FLASHWINFO
structure you can control the type of flashing :
In addition, each one of these modes provides for the flash-interval to be specified, as well as specifying whether the flashing object should be the on-screen window, the taskbar entry, or both. Like FlashWindow, FlashWindowEx does not affect an applications icon that may reside in the systray area of the taskbar; the code for animating the systray icon that could be used in conjunction with FlashWindowEx is listed under the Related items above. Due to the number of options available, I chose to break up the visual look of the demo form using frames. These are strictly for clarity and serve no purpose to the actual demo of the routines. If you're interested in replicating the above, Combo1 is at the top, Command1 and Command2 are in frame 1, Command 3 and Combo2 are in frame 2, and Command 4 and Combo 3 are in frame 3. When the Until Activated option is selected, the "Flashes until freeze" value represents the number of flashes that will occur before the taskbar item "stays on" (stops flashing in a highlighted state). I've discovered that by passing -1, the flashing will continue until the application is activated. At a value > 0, the item will flash and then "freeze on". Note as well that the demo builds a flag to demonstrate selectively flash the window or the taskbar item. In practical use where you may want to flash both, the provided constant FLASHW_ALL can be used in place of FLASHW_FLAGS and/or FLASHW_CAPTION and FLASHW_TRAY. |
BAS Module Code |
None. |
|
Form Code |
Add the following to a form containing a three combo boxes (Combo1, Combo2, Combo3), four command buttons (Command1 through Command4, and two check boxes (Check1, Check2): |
|
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Stop flashing. The system restores the 'window to its original state Private Const FLASHW_STOP As Long = 0 'Flash the window caption Private Const FLASHW_CAPTION As Long = &H1 'Flash the taskbar button Private Const FLASHW_TRAY As Long = &H2 'Flash both the window caption and taskbar button Private Const FLASHW_ALL As Long = (FLASHW_CAPTION Or FLASHW_TRAY) 'Flash continuously, until the FLASHW_STOP flag is set Private Const FLASHW_TIMER As Long = &H4 'Flash continuously until the window comes 'to the foreground Private Const FLASHW_TIMERNOFG As Long = &HC Private FLASHW_FLAGS As Long Private Type FLASHWINFO cbSize As Long hwnd As Long dwFlags As Long uCount As Long dwTimeout As Long End Type Private Declare Function FlashWindowEx Lib "user32" _ (pflashwininfo As FLASHWINFO) As Long Private Sub Form_Load() Dim cnt As Long With Combo1 .AddItem "0 (default cursor rate)" .AddItem "50" .AddItem "100" .AddItem "250" .AddItem "500" .AddItem "1000" .ListIndex = 0 End With With Combo2 For cnt = 5 To 100 Step 5 .AddItem cnt Next .ListIndex = 0 End With With Combo3 .AddItem "-1" .AddItem "0" For cnt = 5 To 100 Step 5 .AddItem cnt Next .ListIndex = 0 End With Command1.Caption = "Begin Flash" Command2.Caption = "Stop Flash" Command3.Caption = "Begin Flash" Command4.Caption = "Begin Flash" Check1.Caption = "Window" Check2.Caption = "Tray" Check1.Value = vbChecked Check2.Value = vbChecked End Sub Private Sub Check1_Click() FLASHW_FLAGS = 0& If Check1.Value = vbChecked Then FLASHW_FLAGS = FLASHW_CAPTION If Check2.Value = vbChecked Then FLASHW_FLAGS = FLASHW_FLAGS Or FLASHW_TRAY End Sub Private Sub Check2_Click() FLASHW_FLAGS = 0& If Check1.Value = vbChecked Then FLASHW_FLAGS = FLASHW_CAPTION If Check2.Value = vbChecked Then FLASHW_FLAGS = FLASHW_FLAGS Or FLASHW_TRAY End Sub Private Sub Command1_Click() Call FlashBegin(Me.hwnd, Val(Combo1.List(Combo1.ListIndex))) Combo1.Enabled = False Command1.Enabled = False End Sub Private Sub Command2_Click() Call FlashEnd(Me.hwnd) Command1.Enabled = True Combo1.Enabled = True End Sub Private Sub Command3_Click() Call FlashBeginCount(Me.hwnd, _ Val(Combo1.List(Combo1.ListIndex)), _ Val(Combo2.List(Combo2.ListIndex))) End Sub Private Sub Command4_Click() Me.WindowState = vbMinimized Call FlashBeginUntilActive(Me.hwnd, _ Val(Combo1.List(Combo1.ListIndex)), _ Val(Combo3.List(Combo3.ListIndex))) End Sub Private Sub FlashBegin(ByVal hwnd As Long, ByVal Frequency As Long) Dim fwi As FLASHWINFO With fwi .cbSize = Len(fwi) .hwnd = hwnd .dwFlags = FLASHW_FLAGS Or FLASHW_TIMER .dwTimeout = Frequency .uCount = -1 End With Call FlashWindowEx(fwi) End Sub Private Sub FlashBeginCount(ByVal hwnd As Long, _ ByVal Frequency As Long, _ ByVal nCount As Long) Dim fwi As FLASHWINFO If (nCount > 0) Then With fwi .cbSize = Len(fwi) .hwnd = hwnd .dwFlags = FLASHW_FLAGS .dwTimeout = Frequency .uCount = nCount End With Call FlashWindowEx(fwi) End If End Sub Private Sub FlashBeginUntilActive(ByVal hwnd As Long, _ ByVal Frequency As Long, _ ByVal nCount As Long) Dim fwi As FLASHWINFO If (Frequency > 0) Then With fwi .cbSize = Len(fwi) .hwnd = hwnd .dwFlags = FLASHW_TIMERNOFG Or FLASHW_FLAGS .dwTimeout = Frequency .uCount = nCount End With Call FlashWindowEx(fwi) End If End Sub Private Sub FlashEnd(ByVal hwnd As Long) Dim fwi As FLASHWINFO With fwi .cbSize = Len(fwi) .dwFlags = FLASHW_STOP .hwnd = Me.hwnd .uCount = 0 End With Call FlashWindowEx(fwi) End Sub |
Comments |
|
|
|
|||||
|
|||||
|
|||||
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |