Newsgroup: it.comp.lang.visual-basic
Titolo: problema con tray-icon

Ciao, nella mia applicazione, quando si minimizza il form, esso diventa
invisibile e sparisce dalla barra delle applicazioni e cliccando sull'icona
della programma nella traybar si apre un menu, dove c'è un sottomenu che
serve per rendere di nuovo visibile: il problema è che il form torna
visibile solo quando si è cliccato *2* volte sul sottomenu...Il codice è
questo(naturalmente il menu che rende di nuovo visibile il form è visibile
solo quando il form è ridotto a icona :-) )
Private Sub mnuShow_Click()
mnuShow.Visible = False   'torna di nuovo invisibile
   Me.Visible = True
'mostra il form
   bMShown = True               'variabile che serve per
sapere
                                          ' se il form è visibile o
no
End Sub
Vi metto anche il codice dell'evento form_resize
Private
Sub Form_Resize()
 If Me.WindowState = 1 Then
    bMShown = False
Me.Visible = False                'form non visibile
mnuShow.Visible = True      'sottomenu visibile solo adesso
 End If
p.s. x inserire l'icona nella tray ho usato l'API Shell_NotifyIcon
--------------------------------
Inviato via 
http://usenet.iol.it

 sottomenu...
Metti in un modulo il codice sottostante ed in un form quello ancora
piu' sotto ;)
'****************
'*    MODULO    *
'****************
Option Explicit
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias
"Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA)
As Long
Private 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 SysIcon As NOTIFYICONDATA, RunningInTray As Boolean
Public Sub ShowIcon(ByRef TrayForm As Form)
    SysIcon.cbSize = Len(SysIcon)
    SysIcon.hwnd = TrayForm.hwnd
    SysIcon.uID = vbNull
    SysIcon.uFlags = 7
    SysIcon.uCallbackMessage = 512
    SysIcon.hIcon = TrayForm.Icon
    SysIcon.szTip = TrayForm.Caption + Chr(0)
    Shell_NotifyIcon 0, SysIcon
    RunningInTray = True
End Sub
Public Sub RemoveIcon(TrayForm As Form)
    SysIcon.cbSize = Len(SysIcon)
    SysIcon.hwnd = TrayForm.hwnd
    SysIcon.uID = vbNull
    SysIcon.uFlags = 7
    SysIcon.uCallbackMessage = vbNull
    SysIcon.hIcon = TrayForm.Icon
    SysIcon.szTip = Chr(0)
    Shell_NotifyIcon 2, SysIcon
    RunningInTray = False
End Sub
'****************
'* FINE  MODULO *
'****************
'****************
'*     FORM     *
'****************
Private Sub Form_Load()
   ShowIcon Me
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As
Single, y As Single)
   If RunningInTray Then
      Select Case x
         'Case 7680   ' MouseMove
         'Case 7695   ' Left MouseDown
         'Case 7710   ' Left MouseUp
         Case 7725    ' Left DoubleClick
            Me.WindowState = vbNormal
            Me.Move Int((Screen.Width - Me.Width) / 2),
Int((Screen.Height - Me.Height) / 2)
            Me.Show
            Me.SetFocus
         'Case 7740   'Right MouseDown
         Case 7755   ' Right MouseUp
            Me.PopupMenu mnuMenu 'Il menu'
         'Case 7770   ' Right DoubleClick
      End Select
   End If
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
   If UnloadMode = 0 Then
      Me.Hide
      Cancel = 1
   Else
      RemoveIcon Me
   End If
End Sub
Private Sub mnuEsci_Click()
   Unload Me
End Sub
'****************
'*  FINE FORM   *
'****************
hth
Lokar
--
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt

Ti ringrazio, anche era sbagliata solo una riga di codice.
Andrea
