RoboRob
asked on
How to stop flashing title bar?
I was using the KnowledgeBase article (Q176085) to put a program in the system tray when it is minimized. Everything works fine, but when you maximize the program's form by clicking or double-clicking on its tray icon, the form's title bar flashes on and off (enabled/disabled) a few times. I'm pretty sure this is by design in order to cause attention to the form, but it's kind of annoying.
Is there any way to stop the flashing title bar?
Is there any way to stop the flashing title bar?
ASKER
Not my design, Microsoft's!
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
try using FlashWindow with bInvert = false
here is the declaration for this function:
Public Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long
here is the declaration for this function:
Public Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long
ASKER
While korky's solution was simple and did get rid of the flashing title bar, it left the app without the focus (or at least appearing as if it didn't have the focus).
Ark's solution worked perfectly. To simplify things for anyone else accessing this question, here's the code needed to restore the app:
Dim lonResult As Long
Dim lonProcessId As Long
Me.WindowState = vbNormal
lonResult = SetForegroundWindow(Me.hWn d)
Me.Show
lonResult = GetWindowThreadProcessId _
(Me.hWnd, lonProcessID)
AppActivate lonProcessID
Of course, you also have to declare the SetForegroundWindow and GetWindowThreadProcessId API functions:
Declare Function SetForegroundWindow _
Lib "user32" (ByVal hWnd As Long) As Long
Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hWnd As Long, lpdwProcessId As Long) As Long
That's it!
Rob
Ark's solution worked perfectly. To simplify things for anyone else accessing this question, here's the code needed to restore the app:
Dim lonResult As Long
Dim lonProcessId As Long
Me.WindowState = vbNormal
lonResult = SetForegroundWindow(Me.hWn
Me.Show
lonResult = GetWindowThreadProcessId _
(Me.hWnd, lonProcessID)
AppActivate lonProcessID
Of course, you also have to declare the SetForegroundWindow and GetWindowThreadProcessId API functions:
Declare Function SetForegroundWindow _
Lib "user32" (ByVal hWnd As Long) As Long
Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hWnd As Long, lpdwProcessId As Long) As Long
That's it!
Rob
Hi
Rob: Thank you for points. I posted all code just to show another way (not shown at MS sample) how to get notification from SysTray without subclassing
Rob: Thank you for points. I posted all code just to show another way (not shown at MS sample) how to get notification from SysTray without subclassing
Really by design? :-)