Newsgroup: it.comp.lang.visual-basic
Titolo: Evento Mouse Move, Che fine hai fatto!

Salve a tutti,
                   scrivo per un problema verificatosi con un'applicazione
che ho sviluppato per un apparecchio creato da me, ho inserito in tale
applicazione del codice che alla minimizzazione della finestra mi crea un
icona nella traybar e fa sparire tutto il resto, fino ad ora era andato
tutto bene se non che, ho voluto implementare anche le finestre che seguono
una sagoma ben definita con il codice che riporto di seguito:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim ButtonCode As Integer
    Text3.Text = KeyCode
    If (KeyCode >= 112 Or KeyCode <= 123) And Shift = 0 Then
        ButtonCode = KeyCode - 112
        Bottone = "Bottone " + CStr(ButtonCode)
        NC = iniRead(cfgPath, Bottone, "N°Bottoni", Value)
        If Val(NC) > 0 Then Call btnSinistra_MouseDown(ButtonCode, 1, 0, 0,
0)
    End If
    If (KeyCode >= 112 Or KeyCode <= 123) And Shift = 2 Then
        ButtonCode = KeyCode - 100
        Bottone = "Bottone " + CStr(ButtonCode)
        NC = iniRead(cfgPath, Bottone, "N°Bottoni", Value)
        If Val(NC) > 0 Then Call btnSinistra_MouseDown(ButtonCode, 1, 0, 0,
0)
    End If
    If (KeyCode >= 112 Or KeyCode <= 123) And Shift = 1 Then
        ButtonCode = KeyCode - 112
        Bottone = "Bottone " + CStr(ButtonCode)
        NC = iniRead(cfgPath, Bottone, "N°Bottoni", Value)
        If Val(NC) = 2 Then Call btnDestra_MouseDown(ButtonCode, 1, 0, 0, 0)
    End If
    If (KeyCode >= 112 Or KeyCode <= 123) And Shift = 3 Then
        ButtonCode = KeyCode - 100
        Bottone = "Bottone " + CStr(ButtonCode)
        NC = iniRead(cfgPath, Bottone, "N°Bottoni", Value)
        If Val(NC) = 2 Then Call btnDestra_MouseDown(ButtonCode, 1, 0, 0, 0)
    End If
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
    Text4.Text = KeyAscii
    If KeyAscii = 1 Then Call AddControl_Click
    If KeyAscii = 20 Then Call EliminateControl_Click
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    If KeyCode >= 112 Or KeyCode <= 123 Then SignalPulseUp
End Sub
Private Sub Form_Resize()
  'In caso di minimizzazione inserisce un'icona nella traybar.
  If Form1.WindowState = 1 Then
  'Setta i valori individuali del tipo NOTIFYICONDATA.
         nid.cbSize = Len(nid)
         nid.hWnd = Form1.hWnd
         nid.uId = vbNull
         nid.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
         nid.uCallBackMessage = WM_MOUSEMOVE
         nid.hIcon = Form1.Icon
         nid.szTip = "Power Control v1.2" & vbNullChar
         'Nasconde la finestra e aggiunge un'icona nella taskbar
         Me.Hide
         Shell_NotifyIcon NIM_ADD, nid
         'Ritornando allo stato normale cancella l'icona dalla taskbar
   ElseIf Form1.WindowState = 0 Then
        Shell_NotifyIcon NIM_DELETE, nid
   End If
End Sub
Private Sub Form_Terminate()
         'Elimina alla fine del programma l'icona aggiunta alla taskbar
         Shell_NotifyIcon NIM_DELETE, nid
End Sub
Private Sub Form_Load()
    Dim Region&, Region2&
    Region& = CreateRoundRectRgn(1, 1, 577, 393, 20, 20)
    'Cambiando i parametri sopra si possono ottenere finestre ellittiche e
rettangolari con gli angoli smussati
    Region2& = SetWindowRgn(Me.hWnd, Region, True)
    .....
    .....
End Sub
Ora tra la versione funzionante di prima e quella attuale passa anche la
differenza di avere implementato la pressione dei tasti specificata nel form
affinchč un'applicazione che effettua un sendkeys anche quando la finestra e
minimizzata in traybar faccia effetto
Il problema adesso e che non mi cattura piů l'evento click sull'icona nella
traybar ne destro ne sinistro, e non capisco proprio perchč, anche
eliminando la sezione per il ritaglio del form principale e quella della
pressione dei tasti, nulla, cosa posso fare, il codice per il riconoscimento
del clik sull'icona č:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single,
Y As Single)
          'Si verifica un evento quando il puntatore del mouse č
          'all'interno del rettangolo dell'icona della taskbar.
          Dim msg As Long
          Dim sFilter As String
          msg = X / Screen.TwipsPerPixelX
          Select Case msg
             Case WM_LBUTTONDOWN
              Barra2.Visible = False
              Barra3.Visible = False
              Ripristina.Visible = False
              PreferenzePopup.Visible = False
              HardwarePopup.Visible = False
              EsciPopup.Visible = False
              Form1.WindowState = 0
              Me.Show
             Case WM_RBUTTONDOWN
              Barra2.Visible = True
              Barra3.Visible = True
              Ripristina.Visible = True
              PreferenzePopup.Visible = True
              HardwarePopup.Visible = True
              EsciPopup.Visible = True
             'Fa comparire il menu Popup
              PopupMenu Popup
             Case WM_LBUTTONDBLCLK
             Case WM_RBUTTONUP
             Case WM_RBUTTONDBLCLK
          End Select
End Sub
Le variabili e le funzioni dichiarate all'inizio sono invece:
    Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As
Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As
Long, ByVal Y3 As Long) As Long
    Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long,
ByVal hRgn As Long, ByVal bRedraw As Long) As Long
    Dim MouseEvent As Boolean
    Dim Oldx As Double
    Dim Oldy As Double
'/--------------Variabili per l'icona nella taskbar-------------------/
      'Dichiarazione di una variabile definita dall'utente
      'da passare alla funzione Shell_NotifyIcon.
      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
      'Dichiara la funzione per la costante API. Queste costanti
      'possono essere trovate nell'header file Shellapi.h.
      'Le seguenti costanti sono le chiamate da aggiungere mandate alla
funzione
      'Shell_NotifyIcon, modifica, o cancella un'icona dalla taskbar.
      Private Const NIM_ADD = &H0
      Private Const NIM_MODIFY = &H1
      Private Const NIM_DELETE = &H2
      'The following constant is the message sent when a mouse event occurs
      'within the rectangular boundaries of the icon in the taskbar status
      'area.
      Private Const WM_MOUSEMOVE = &H200
      'Le seguenti costanti sono le flags che indicano i membri validi
      'del tipo di dati NOTIFYICONDATA.
      Private Const NIF_MESSAGE = &H1
      Private Const NIF_ICON = &H2
      Private Const NIF_TIP = &H4
      'Le seguenti costanti sono usate per determinare un evento del
      'mouse sull'icona nella taskbar.
      'Costanti per il Left-click.
      Private Const WM_LBUTTONDBLCLK = &H203   'Double-click
      Private Const WM_LBUTTONDOWN = &H201     'Button down
      Private Const WM_LBUTTONUP = &H202       'Button up
      'Costanti per il Right-click.
      Private Const WM_RBUTTONDBLCLK = &H206   'Double-click
      Private Const WM_RBUTTONDOWN = &H204     'Button down
      Private Const WM_RBUTTONUP = &H205       'Button up
      'Dichiarazione della chiamata della funzione API.
      Private Declare Function Shell_NotifyIcon Lib "shell32" Alias
"Shell_NotifyIconA" _
         (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
      'Dimensiona una variabile del tipo definito dall'utente.
      Dim nid As NOTIFYICONDATA
Help Me Please!!!!!!

 pressione dei tasti, nulla, cosa posso fare
Nella form che viene minimizzata, deve rimanere un piccolo spazio libero, in
alto a sinistra, fra la barra del titolo e il primo controllo, perchč
l'evento mousemove avviene quando il mouse passa di lě.
Controlla se non hai per caso spostato o inserito qualche controllo in alto
a sinistra.
Ciao
Alberto

Ti ringrazio tantissimo, c'era proprio un controllo in alto a sinistra,
dovrň ridisegnare l'interfaccia grafica ma adesso funziona alla grande,
grazie ancora!
