Newsgroup: it.comp.lang.visual-basic
Titolo: icona traybar

Vorrei che il form principale del mio programma, quando viene ridotto a 
icona, non vada a finire sulla barra delle applicazioni come succede di 
solito ma si veda solo un'icona sulla traybar (da utilizzare per 
ripristinare il form con un clic). Come posso fare?
Grazie.

DevarajA ha scritto:

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 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 Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias
"Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA)
As Long
--------
Dim IconaTray As NOTIFYICONDATA
With IconaTray
        .cbSize = Len(IconaTray)
        .hIcon = frmMain.Icon
        .hwnd = frmMain.hwnd
        .szTip = frmMain.Caption & vbNullChar
        .uCallbackMessage = WM_MOUSEMOVE
        .uFlags = NIF_MESSAGE + NIF_ICON + NIF_TIP
        .uID = 1
End With
Shell_NotifyIcon NIM_ADD, IconaTray
---------
Nel form devi impostare "ShowInTaskbar"= False
Ciao!
Daniele.

Barzo@Google ha scritto:

Sono un pò arrugginito in VB ed in Access queste cose non hanno molto
senso quindi potrei commettere un errore:
Come hai suggerito non si ripristina con il Click, finisce solo nella
Try, per gestire il ripristino serve subclassare e gestire il messagio
DBL_CLICK o sbaglio..?
Ciao
@Alex

 DBL_CLICK o sbaglio..?
No, il messaggio viene gestito semplicemente con l'evento MouseMove:
Private Sub MainForm_MouseMove(Button As Integer, Shift As Integer, x
As Single, y As Single)
    Dim hResult As Long
    Dim msg As Long
    Dim MPos As POINTAPI
    'Il valore di X può dipendere dai settaggi delle unità di misura
    'Siccome la proprietà ScaleMode è vbTwip, devo convertire in
Pixel
    msg = x / Screen.TwipsPerPixelX
    if msg = WM_LBUTTONUP Then
            ' pulsante sinistro rilasciato MOSTRO IL MENU
            hResult = SetForegroundWindow(Me.hwnd)
            hResult = GetCursorPos(MPos)
            PopMenu.ShowPopupMenu
                 Screen,
                 1,
                 MPos.x * Screen.TwipsPerPixelX,
                 MPos.y * Screen.TwipsPerPixelY
    End If
End Sub

Barzo@Google ha scritto:

Ora se posso ti chiedo un chiarimento sulla determinazione di msg...!
Primo mi sfugge l'associazione [msg = x / Screen.TwipsPerPixelX]
con WM_LBUTTONUP, in pratica se X è fuori dalle coordinate della
MainForm
assume un valore(Messaggio) dipendente dall'azione del Mouse stesso mi
pare
di capire...?
Se ho capito bene, intercettato il nostro messaggio WM_LBUTTONUP come
faccio a sapere che è relativo all'Icona nella TryBar...?
Sempre nell'esempio ripostato il PopupMenù(che useremo per
ripristinare la visualizzazione o altro) viene aperto sempre, nel caso
di MouseUP fuori dalla MainForm, oppure solo se l'Hande della Finestra
sottostante è l'Icona nella Try...?
Mi verrebbe in mente di usare il WindowFromPoint per identificare
l'handle sotto il Mouse, ma se non lo hai messo sono quasi certo non
serva, oppure mi sfugge ancora qualcosa...
Porta pazienza nel caso fossero banalità ma questi accorgimenti mi
incuriosiscono.. e mi manca qualche BIT.
grazie Daniele
@Alex

 incuriosiscono..
Bè, non c'è nulla di banale a voler capire come funzionano le cose!
Anche se a volte a me capita di dover 'copiare e basta'!!!
Ciao!
Daniele.

 Daniele.
Beh grazie è stato istruttivo.
@Alex