IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Probleme avec api Shell_NotifyIcon et feuille Mdi


Sujet :

VB 6 et antérieur

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut Probleme avec api Shell_NotifyIcon et feuille Mdi
    Bonsoir j ai une application avec plusieurs feuille dont une feuille partent mdi et je voulais utilisé l api pour mettre l icone dans la barre pres de l heure que je reduis la feuille parent le probleme c est que l icone de mon application se met bien pres de l heure mais je suis obligé de cliqué 4 fois pour le retour mon application au lieux de deux fois.

    voici le code ce qui concerne l api

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    'API Shell_NotifyIcon
    '##############################################################################################################################################
    Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
     
     
          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
        'Déclare les constantes de l'API . Ces constantes peuvent être
        'Trouvée dans le fichier d'en-tête Shellapi.h.
     
           'Les constantes suivantes sont des messages envoyés à la
           'Shell_NotifyIcon fonction à ajouter, modifier ou supprimer une icône dans la
           'Statut des tâches.
          Public Const NIM_ADD = &H0
          Public Const NIM_MODIFY = &H1
          Public 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.
          Public Const WM_MOUSEMOVE = &H200
     
     
        'Ce qui suit est le message constant envoyé quand un événement de la souris se produit
        'Dans le rectangle frontières de l'icône dans la barre des tâches statut
          Public Const NIF_MESSAGE = &H1
          Public Const NIF_ICON = &H2
          Public Const NIF_TIP = &H4
     
     
          'Left-click constants.
          Public Const WM_LBUTTONDBLCLK = &H203   'Double-click
          Public Const WM_LBUTTONDOWN = &H201     'Button down
          Public Const WM_LBUTTONUP = &H202       'Button up
     
          'Right-click constants.
          Public Const WM_RBUTTONDBLCLK = &H206   'Double-click
          Public Const WM_RBUTTONDOWN = &H204     'Button down
          Public Const WM_RBUTTONUP = &H205       'Button up
              'Dimension a variable as the user-defined data type.
          Public nid As NOTIFYICONDATA
        'Dimension comme une variable définie par l'utilisateur type de données.
     
    Public Y As Integer
    Public X As Integer
    Public toggle As Integer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    Public Sub FormUnload()
    'API Shell_NotifyIcon
    '########################
    Set frm_child1_cons = Nothing
    End
    '########################
    End Sub
    Private Sub MDIForm_Load()
        Me.Show
        Y = 2
    End Sub
     
    Private Sub MDIForm_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    'API Shell_NotifyIcon
    '##############################################################################################
        'Event occurs when the mouse pointer is within the rectangular
              'boundaries of the icon in the taskbar status area.
              Dim msg As Long
              Dim sFilter As String
              msg = X / Screen.TwipsPerPixelX
              Select Case msg
                 Case WM_LBUTTONDOWN
                 Case WM_LBUTTONUP
     
                 Case WM_LBUTTONDBLCLK
                    Shell_NotifyIcon NIM_DELETE, nid
                    Me.Show
                    Me.WindowState = 2
     
                 Case WM_RBUTTONDOWN
     
     
                 Case WM_RBUTTONUP
                 Case WM_RBUTTONDBLCLK
                     Shell_NotifyIcon NIM_DELETE, nid
                     Me.Show
                     Me.WindowState = 2
              End Select
     
     
    '#################################################################################################
     
    End Sub
     
    Private Sub MDIForm_Resize()
        If Me.WindowState = vbMinimized Then
        'API Shell_NotifyIcon
        '###################################################################################
            'Cliquez sur ce bouton pour ajouter une icône de la barre des tâches statut.
              'Définir les valeurs individuelles du type de données NOTIFYICONDATA.
             nid.cbSize = Len(nid)
             nid.hwnd = Me.hwnd
             nid.uID = vbNull
             nid.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
             nid.uCallbackMessage = WM_MOUSEMOVE
             nid.hIcon = Me.Icon
             nid.szTip = "Click to show Form" & vbNullChar
     
             'Appelez la fonction Shell_NotifyIcon pour ajouter l'icône sur la barre des tâches
             Shell_NotifyIcon NIM_ADD, nid
             Me.Hide
        '#########################################################################################
        End If
    End Sub
     
    Private Sub MDIForm_Terminate()
    'API Shell_NotifyIcon
    '##########################################################
    'Supprimer l'icône ajoutée à partir de la barre des tâches
             Shell_NotifyIcon NIM_DELETE, nid
    '##########################################################
    End Sub
     
    Private Sub MDIForm_Unload(Cancel As Integer)
    'API Shell_NotifyIcon
    '################################################
    toggle = 0
     Shell_NotifyIcon NIM_DELETE, nid
     Call FormUnload
    '################################################
    ##############################################################[/CODE]
    Je pense que c est du a la feuille parent car d habitude je n' ai pas ce problème

    Meric d avance

  2. #2
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 108
    Points : 16 639
    Points
    16 639
    Par défaut
    jacko842, Inscrit le jeudi 15 juin 2006, Total message: 96, discussions ouvertes: 31, Nbr.de TAGs utilisés: 21, moyenne: 68/100, ma partitipation jusqua ce post: 6


    je ne suis pas tres fort dans ce domaine, mais puique tu n'as pas de reponse, apres essais, ce code fonctionne, peut être te permettrat il de trouver pourquoi tu as un probléme dans le tien.
    Par fainéantise je n'ai pas essayer ton code.

    Dans un module.bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Option Explicit
     
    'type défini par l'utilisateur requis par Shell_NotifyIcon API call
       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
     
       'constantes requises par l'appel API Shell_NotifyIcon :
       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 Const WM_MOUSEMOVE = &H200
       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 SetForegroundWindow Lib "user32" _
       (ByVal hwnd As Long) As Long
       Public Declare Function Shell_NotifyIcon Lib "shell32" _
       Alias "Shell_NotifyIconA" _
       (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
     
       Public nid As NOTIFYICONDATA
    Dans un MDIForm, un menu
    "Essais" (Name Mnu1)
    ...."Afficher (Name SouMnu1, index 0)
    ...."Quitter" (Name SouMnu1, index 1)
    "Affiche Form Fille" (Name Mnu2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Option Explicit
    Dim Result As Long
     
    Private Sub MDIForm_Load()
    Mnu1.Visible = False
    'la forme doit être entièrement visible avant d'appeler Shell_NotifyIcon
    Me.Show
    With nid
        .cbSize = Len(nid)
        .hwnd = Me.hwnd
        .uId = vbNull
        .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
        .uCallBackMessage = WM_MOUSEMOVE
        .hIcon = Me.Icon
        .szTip = "MDI barre SYSTRAY " & vbCrLf & "Bt. Droit choisir, Bt. Gauche afficher" & vbNullChar
    End With
    Shell_NotifyIcon NIM_ADD, nid
    Me.WindowState = vbMinimized
    End Sub
     
    Private Sub MDIForm_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    'cette procédure reçoit les rappels de l'icône de barre d'état système.
    Dim msg As Long
    msg = X / Screen.TwipsPerPixelX
    Select Case msg
     
     Case WM_LBUTTONUP                  '514 restore form window
      If Me.WindowState = vbNormal Or Me.WindowState = vbMaximized Then
       Me.WindowState = vbMinimized: MDIForm_Resize
       Else
       Me.WindowState = vbNormal
       Result = SetForegroundWindow(Me.hwnd)
       Me.Show
       Shell_NotifyIcon NIM_MODIFY, nid
      End If
     
     Case WM_LBUTTONDBLCLK     '515 restore form window
      Me.WindowState = vbNormal: Result = SetForegroundWindow(Me.hwnd): Me.Show
     
     Case WM_RBUTTONUP                  '517 display popup menu
      Result = SetForegroundWindow(Me.hwnd)
      Me.PopupMenu Me.Mnu1
    End Select
    End Sub
     
    Private Sub MDIForm_Resize()
    'Nécessaire pour assurer que la fenêtre réduite soit masquée
    If Me.WindowState = vbMinimized Then Me.Hide
    End Sub
    Private Sub MDIForm_Unload(Cancel As Integer)
    'cela supprime l'icône de la barre d'état système
    nid.cbSize = Len(nid): nid.uId = 1&
    Shell_NotifyIcon NIM_DELETE, nid
    End
    End Sub
     
    Private Sub Mnu2_Click()
    Form1.Show
    End Sub
    Private Sub SouMnu1_Click(Index As Integer)
    If Index = 0 Then 'Afficher
       Me.WindowState = vbNormal
       Result = SetForegroundWindow(Me.hwnd)
       Me.Show
       Shell_NotifyIcon NIM_MODIFY, nid
     Else
     MDIForm_Unload 0
    End If
    End Sub
    Dans un Form Fille (MDIChild = True), un menu
    "Essais menu fille" (Name Mnu1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
     
    Private Sub Mnu1_Click()
    Me.Caption = "Coucou"
    End Sub
    Bonne continuation

Discussions similaires

  1. probleme avec api mysql
    Par nR.mEcs0ft dans le forum MySQL
    Réponses: 3
    Dernier message: 09/10/2010, 22h42
  2. Probleme avec Api OpenOffice.org
    Par pyth35 dans le forum Langage
    Réponses: 0
    Dernier message: 16/04/2010, 17h08
  3. probleme avec API mysql
    Par tyson75 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/06/2007, 20h00
  4. [JavaMail]Probleme avec API JavaMail
    Par spk4ever dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 10/04/2006, 16h39
  5. [EXE] Problème avec Api
    Par Regis.C dans le forum Général Java
    Réponses: 5
    Dernier message: 14/03/2005, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo