System Tray Icon

I'm trying to run an application written in VB5 on the background, with an icon on the system tray (where the time also is in the taskbar). Can anyone tell me how to do this ?

Michel
LVL 1
siouxAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

clifABBCommented:
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
SteveB032698Commented:
It isn't necessary to use an OCX in VB5.  A simple API call to ShellNotifyIcon  in a .bas module can do the same thing without the overhead of the OCX.  It is also FREE.
0
clifABBCommented:
SteveB:
This ocx is freeware.  Also, to use API for placing and controlling tray icons is possible, but you need callbacks and generally more code than is necessary.  Why reinvent the wheel?
0
tadCommented:
I use the following code - downloaded from http://www.sourcesite.simplenet.com/Frames.html



'Copyright 1997 Karland International
'You may use this BAS file as much as you want as
'long as you leave all the contents in it..

'For starters to make this work you need to do one thing.
'Create a menu called mnuSystemtray.  Create as many options
'you want under it.  This will be what pops up when they right
'click on the icon while it's in the system tray..  After you have
'created this menu then make sure that it is invisible and
'that's all there is too it..

'***The below goes in a Module (BAS File)***
'Icon in systemtray
Public Const WM_LBUTTONDBLCLICK = &H203
Public Const WM_RBUTTONUP = &H205
Public Const WM_MOUSEMOVE = &H200
Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4

Public Type NOTIFYICONDATA
  cbSize As Long
  hwnd As Long
  uId As Long
  uFlags As Long
  ucallbackMessage As Long
  hIcon As Long
  szTip As String * 64
End Type

Public VBGTray As NOTIFYICONDATA
Declare Function Shell_NotifyIcon Lib "shell32" Alias _
    "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long


'Examample of use:
'****The below goes into your main form*****
'****Copy the below and take out the first ' in every line****
'Private Sub GoSystemTray()
'  VBGTray.cbSize = Len(VBGTray)
'  VBGTray.hwnd = Me.hwnd
'  VBGTray.uId = vbNull
'  VBGTray.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
'  VBGTray.ucallbackMessage = WM_MOUSEMOVE


'  VBGTray.hIcon = Me.Icon
'  'tool tip text
'  VBGTray.szTip = Me.Caption & vbNullChar

'  Call Shell_NotifyIcon(NIM_ADD, VBGTray)

'  App.TaskVisible = False   'remove application from taskbar
'  Me.Hide

'End Sub

'Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
'  Static lngMsg As Long
'  Static blnFlag As Boolean
'  Dim result As Long

'lngMsg = x / Screen.TwipsPerPixelX

'  If blnFlag = False Then
'        blnFlag = True
'        Select Case lngMsg
'        'doubleclick
'        Case WM_LBUTTONDBLCLICK
'            Me.WindowState = 0
'            Me.Show
'        'right-click
'        Case WM_RBUTTONUP
'          result = SetForegroundWindow(Me.hwnd)
'          Me.PopupMenu mnuSystemtray        '<---You will need to create a menu called mnuSystemtray
'        End Select
'        blnFlag = False
' End If
'End Sub

'Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

'  VBGTray.cbSize = Len(VBGTray)
'  VBGTray.hwnd = Me.hwnd
'  VBGTray.uId = vbNull

'  Call Shell_NotifyIcon(NIM_DELETE, VBGTray)

'End Sub

'Private Sub Form_Load()
'VBGTray.cbSize = Len(VBGTray)
'VBGTray.hwnd = Me.hwnd
'VBGTray.uId = vbNull
'VBGTray.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
'VBGTray.ucallbackMessage = WM_MOUSEMOVE


'VBGTray.hIcon = Me.Icon
''tooltiptext
'VBGTray.szTip = Me.Caption & vbNullChar

'Call Shell_NotifyIcon(NIM_ADD, VBGTray)

'mnuSystemtray.Visible = False
'End Sub

'Private Sub Form_Resize()
'    If Me.WindowState = 1 Then
'        GoSystemTray
'    End If
'End Sub

0
siouxAuthor Commented:
Thanx. The OCX works fine for me.
Michel
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic Classic

From novice to tech pro — start learning today.