Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it L'avatar di rs125
    Registrato dal
    May 2008
    Messaggi
    193

    [VB6] IconTray non visualizza menu

    Salve ragazzi,ho un problema...Ho aggiunto la possibilità di far visualizzare l'icona del mio programma nella traycon e a sua volta al doppio click di visualizzare un menu tramite questo codice:
    codice:
    Private Sub MDIForm_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim Msg
    DoEvents
    Msg = Button
    Msg = x / Screen.TwipsPerPixelX
    Select Case Msg
        Case WM_LBUTTONDBLCLK
        PopupMenu MostraMenu
        Case WM_RBUTTONUP
           Case WM_RBUTTONDBLCLK
        PopupMenu MostraMenu
    End Select
    End Sub
    Questo è un MDIForm e non un form normale e mi sono accorto proprio che in un form normale funziona tranquillamente ma nel mio caso no,perchè?Grazie mille a tutti

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Non funziona perchè un MDIForm è diverso da un Form.

    Io uso sempre un PictureBox (picTray) nascosto nel form che contiene anche l'icona da mostrare, poi lo imposto come oggetto di Callback.
    Così posso gestire il tutto nell'evento picTray_MouseMove.

    Ciao

  3. #3
    Utente di HTML.it L'avatar di rs125
    Registrato dal
    May 2008
    Messaggi
    193
    e come lo imposti come oggetto di callback?

  4. #4
    Utente di HTML.it L'avatar di rs125
    Registrato dal
    May 2008
    Messaggi
    193
    Però ripensandoci l'icona me la visualizza tranquillamente e perchè non deve usare il controllo mouseMove??Non lo capisco proprio!


    PS:Comunque ho cercato su internet e non so impostare la pictray come callback.Ho letto un pò su microsoft ma non ho capito se è quella che mi serve,Mi potrei aiutare??

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Dipende
    - da cosa hai letto
    - dal codice che usi

    Comunque io uso questa funzione che chiamo quando minimizzo il form:

    codice:
    Public Sub InitTrayIcon(callback As Object, icon As IPictureDisp, testo As String)
    
      Rem Il form DEVE essere visibile prima di chiamare la Shell_NotifyIcon
      With NID
        .cbSize = Len(NID)
        .hWnd = callback.hWnd
        .uID = vbNull
        .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
        .uCallbackMessage = WM_MOUSEMOVE
        .hIcon = icon.Handle
        .szTip = testo & vbNullChar
      End With
      gbIconInTray = True
      Shell_NotifyIcon NIM_ADD, NID
    
    End Sub
    La chiamata eseguita dal form è questa:
    codice:
    InitTrayIcon picTray, picTray.Picture, Me.Caption
    Ciao :-)

  6. #6
    Utente di HTML.it L'avatar di rs125
    Registrato dal
    May 2008
    Messaggi
    193
    Ok,grazie...anche io faccio così ma la chiamata la faccio diversamente.Questa non mi funziona!!

    codice:
    Call InitTrayIcon(t, Me)
    Così sui form normali mi funziona sempre!e poi facendo debug mi sottolinea questo

    .hwnd = callback.hwnd
    Immagini allegate Immagini allegate

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non ho capito la tua risposta ... perche' non usi il suggerimento di gibra?

    Cosa hai scritto? Quale codice non funziona? Mostralo tutto con tutti gli errori ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it L'avatar di rs125
    Registrato dal
    May 2008
    Messaggi
    193
    Io uso il suggerimento di gibra ma mi da l'errore riportato nell'immagine presente nel messaggio precedente:
    codice:
    Public Sub InitTrayIcon(callback As Object, icon As IPictureDisp, testo As String)
    
      Rem Il form DEVE essere visibile prima di chiamare la Shell_NotifyIcon
      With NID
        .cbSize = Len(NID)
        .hWnd = callback.hWnd  ''''''''''Qui mi da l'errore!!
        .uID = vbNull
        .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
        .uCallbackMessage = WM_MOUSEMOVE
        .hIcon = icon.Handle
        .szTip = testo & vbNullChar
      End With
      gbIconInTray = True
      Shell_NotifyIcon NIM_ADD, NID
    
    End Sub


    vedi dove ho commentato ('''''''''''Qui mi da l'errore!!) nel codice?ecco mi dice che callback non è impostato.Perchè?


    PSreciso nuovamente che ho un MDIForm e non un form normale.Nel form normale tutto funziona,nell'MDIForm no. Ma perchè?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Devi mostrare TUTTO il codice, anche quello che chiama la funzione in cui hai l'errore.

    E devi indicare quali parametri passi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di rs125
    Registrato dal
    May 2008
    Messaggi
    193
    Ok...ora posto tutto,spero possiate aiutarmi.

    Questo è il mio MDIForm_Load:
    codice:
    Private Sub MDIForm_Load()
        trasparenza = 255 ' Imposto la trasparenza al massimo
        ImpostaToolBar tbTop, iml16a  ',iml16, Non usare in quanto cambia le immagini inserite con quelle di iml16!
    
        Dim rs As ADODB.Recordset
        Dim sSQL As String
        
        CIni.FinestraLeggiPosizione Me
    
        ' così posso usare l'Imagelist in tutto il progetto
        ' riferendomi solamente alla varibali oggetto 'IML'
        Set IML = iml16
        
        sb.Panels("user").Tag = gsUserName
        sb.Refresh
        
        InitTrayIcon picTray, picTray.Picture, Me.Caption 
        
        '---Sto provando ad attivare un panello di comando.
        '---Pannello attivo,ora aggionare ad ogni cambio utente.
        '---Problema Risolto.
        
        Me.sb.Panels(1).Text = gsUserName
        
        If gsUserName = "Administrator" Then
          ElseIf gsUserName = "administrator" Then
          frmMain.Smmodifica.Visible = True
          Else
          frmMain.Smmodifica.Visible = False
        End If
    End Sub
    Questo è invece il mio modulo.bas con la funzione:
    codice:
    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 GestPwd As NOTIFYICONDATA
    Public Const NIM_ADD = &H0
    Public Const NIM_MODIFY = &H1
    Public Const NIM_DELETE = &H2
    Public Const WM_MOUSEMOVE = &H200
    Public Const NIF_MESSAGE = &H1
    Public Const NIF_ICON = &H2
    Public Const NIF_TIP = &H4
    Public Const WM_LBUTTONDOWN = &H201     'Button down
    Public Const WM_LBUTTONUP = &H202       'Button up
    Public Const WM_LBUTTONDBLCLK = &H203   'Double-click
    Public Const WM_RBUTTONDOWN = &H204     'Button down
    Public Const WM_RBUTTONUP = &H205       'Button up
    Public Const WM_RBUTTONDBLCLK = &H206   'Double-click
    Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Public Function HyperJump(ByVal URL As String) As Long
       HyperJump = ShellExecute(0&, vbNullString, URL, vbNullString, vbNullString, vbNormalFocus)
    End Function
    
    Public Sub InitTrayIcon(callback As Object, icon As IPictureDisp, testo As String, f As Form)
    Rem Il form DEVE essere visibile prima di chiamare la Shell_NotifyIcon
      With GestPwd
        .cbsize = Len(GestPwd)
        .hwnd = callback.hwnd
        .uid = vbNull
        .uflags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
        .ucallbackmessage = WM_MOUSEMOVE
        .hicon = icon.Handle
        .sztip = testo & vbNullChar
      End With
      gbIconInTray = True
      Shell_NotifyIcon NIM_ADD, GestPwd
    
    End Sub
    Ok.Ora se lo lascio così mi da questi errori:
    in MDIForm_Load() quando arriva a "InitTrayIcon..." mi dice argomento non facoltativo.
    Allora ho provato a fare così:
    codice:
    Call InitTrayIcon(callback, icon, testo, f)
    E mi dice che callback è una variabile non definita.
    se la dichiaro con
    Dim callback as object
    dim t as string
    dim f as form
    alla fine mi da l'errore "91" che sarebbe quello che ho fatto vedere prima in figura.
    Mi sai aiutare?penso di aver fatto un casino!!

    l'errore 91 si riferisce alla funzione InitTrayIcon ed esattamente a
    .hwnd = callback.hwnd

    Cosa devo fare?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.