begin process at 2008 08 30 19:03:33
1 234 171 membres
203 nouveaux aujourd'hui
14 294 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : systray caption refresh ? [ Archives Visual Basic / J'AI BESOIN D'AIDE !!!! :) ] (diablamanshadow)

systray caption refresh ? le 14/05/2006 03:44:02

diablamanshadow

bonsoir,
voila je travaille sur un ptit projet depuis quelques jours et il ne me manque plus que ce petit detail qui ma pris les 3/4 du temp (plus ou moins 12h) donc je me resigne et vient demander ici si quelqu'un ne sais pas car je pense que cela doit etre un detail qui m'echappe donc voila le code :

'type de données personnalisé
Private Type Donnees
     Taille As Long
     Handle As Long
     Id As Long
     Param As Long
     Rappel As Long
     icone As Long
     Etiquette As String * 59
End Type

'constantes requises par Shell_NotifyIcon :
Const Ajout = &H0
Const Retire = &H2
 
Private Declare Function Shell_NotifyIcon Lib "shell32" _
Alias "Shell_NotifyIconA" _
(ByVal action As Long, don As Donnees) As Boolean

'instance de Donnees
Dim don As Donnees
Private Declare Sub GlobalMemoryStatus Lib "kernel32" _
    ( _
    lpBuffer As MEMORYSTATUS _
    )

Private Type MEMORYSTATUS
        dwLength        As Long
        dwMemoryLoad    As Long
        dwTotalPhys     As Long
        dwAvailPhys     As Long
        dwTotalPageFile As Long
        dwAvailPageFile As Long
        dwTotalVirtual  As Long
        dwAvailVirtual  As Long
End Type
Public sTxtRam As Integer
Public sTxtVirt As Integer

Private Function GetMemStats( _
                             TotalRam As Long, _
                             DispoRam As Long, _
                             TotalVirt As Long, _
                             DispoVirt As Long _
                             )

    'Renvoie les statistiques concernant la mémoire
    'utilisée
   
    Dim MemStat As MEMORYSTATUS

    'Taille de la variable
    MemStat.dwLength = Len(MemStat)

    GlobalMemoryStatus MemStat

    With MemStat
        TotalRam = .dwTotalPhys
        DispoRam = .dwAvailPhys
       
        TotalVirt = .dwTotalVirtual
        DispoVirt = .dwAvailVirtual
       
    End With

End Function

Private Function DrawMemStat( _
                             MemType As Long, _
                             MemMax As Long, _
                             MemUsed As Long _
                             )
                            
    'Affiche les résultats en fonction du type
    'de mémoire, de la mémoire disponible et de
    'la mémoire utilisée
   
    Dim sTxt As String
   
    Select Case MemType
        Case 0      'RAM
            lblRAMTotal = MemUsed & " Mo"
            sTxt = Round(MemUsed / MemMax * 100, 0)
           
            LblRam.Caption = "Mémoire RAM : " & MemUsed& & " Mo - " & sTxt & "%"
            ReyRAM.Value = sTxt
            sTxtRam = sTxt
            don.Etiquette = sTxt
           
        Case 1      'Mémoire Virtuelle
            lblVirtTotal = MemUsed & " Mo"
            sTxt = Round(MemUsed / MemMax * 100, 0)
           
            lblVirt.Caption = "Mémoire Virtuel : " & MemUsed& & " Mo - " & sTxt & "%"
            ReyVIRT.Value = sTxt
            sTxtVirt = sTxt
    End Select
End Function

Private Sub Command1_Click()
    Shell_NotifyIcon Ajout, don
    App.TaskVisible = False
    Me.Visible = False
End Sub

 

Private Sub tmrRefresh_Timer()
    'A chaque rafraîchissement, on
    'récupère les statistiques et on les affiche
   
    'A  :   RAM                     AA  :   RAM libre
    'B  :   Mémoire Virtuelle       BB  :   Mémoire Virtuelle libre

    'On va calculer l'espace utilisé et convertir les données en Mo
    'pour pouvoir les afficher
   
    Dim a As Long, B As Long
    Dim AA As Long, BB As Long
   
    GetMemStats a, AA, B, BB
   
    DrawMemStat 0, (a \ (1024 ^ 2)), ((a - AA) \ (1024 ^ 2))
    DrawMemStat 1, (B \ (1024 ^ 2)), ((B - BB) \ (1024 ^ 2))
        don.Etiquette = LblRam.Caption & vbCrLf & _
                                 lblVirt.Caption

End Sub
Sub Form_Load()
With don
     .Taille = Len(don)
     .Handle = Me.hWnd
     .Id = vbNull
'Pour qu'un icône soit visible, que celui-ci soit sensible aux entrées utilisateur et qu'un texte soit affiché au passage de la souris
     .Param = &H1 Or &H2 Or &H4
'Icône sensible au mouvement de la souris
     .Rappel = &H200
     .icone = Me.Icon
     .Etiquette = "Memoires en Charge"
End With
End Sub


Sub Form_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.
Select Case Button
    Case vbLeftButton
'appelle la fonction de restauration
      Call Restaure_Click
    Case vbRightButton
'appelle l'affichage du menu
       Me.PopupMenu Me.Menu
End Select
End Sub

Sub Restaure_Click()
Me.WindowState = vbNormal
Shell_NotifyIcon Retire, don
App.TaskVisible = True
Me.Visible = True
End Sub

Sub Exit_Click()
Shell_NotifyIcon Retire, don
Unload Me
End Sub

voila donc j'ai mis les ligne :

don.Etiquette = LblRam.Caption & vbCrLf & _
                                 lblVirt.Caption

et donc voila j'aimerais que a chaque fois que l'utilisateur passe sur l'icone mise a coter de l'horloge cela fasse cette action (ou meme s'il reste dessus) j'ai penser dabord tous simplement a mettre un timer qui refresh cette action mais helas cela ne va pas ... a croire que quand sa va en systray tous ce qui se trouve sur la frm est "figer" autant les timer que les progressbarre et autres donc je me demandais comment faire pour refresher se qui est mis quand on passe sur l'ico a coter de l'horloge lors du passage de la souris ^^

merci d'avance
Diablaman


Re : systray caption refresh ? le 14/05/2006 10:25:52

Renfield
(Admin CS)
Réponse acceptée !
j'aime pas trop que tu ai renommé les types et constantes des API...

ton Type donnée est en réalité :
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

ce qui fait que déjà, la taille de cette structure n'est pas bonne dans ton code (szTip n'est pas de la bonne longueur)

les messages pour ajouter, etc sont :
Private Const NIM_ADD As Long = &H0
Private Const NIM_DELETE As Long = &H2
Private Const NIM_MODIFY As Long = &H1

car il existe bel et bien un troisième message : NIM_MODIFY, qu'il faut appeler pour mettre a jour ton icône ou dans ton cas, le texte du tooltip.

pour info, :
.Param = &H1 Or &H2 Or &H4

est :
.uFlags =
NIF_MESSAGE Or NIF_ICON Or NIF_TIP

avec :
Private Const NIF_ICON As Long = &H2
Private Const NIF_MESSAGE As Long = &H1
Private Const NIF_TIP As Long = &H4


et le &h200 utilisé pour définir le message de la fonction de rappel est :
Private Const WM_MOUSEMOVE As Long = &H200

Pour résumer, ne renomme pas les APIs.... c'est source de confusion, voire d'erreur.
enfin, appelle Shell_NoticyIcon avec le mesage NIM_MODIFY, pour mettre a jour ton tooltip

Renfield
Admin CodeS-SourceS - MVP Visual Basic

Re : systray caption refresh ? le 14/05/2006 10:58:13

diablamanshadow
bonjour,
 je vient d'essayer de modifier mon code par le tient de voir comment l'integrer etc mais j'y arrive pas (vu que le systray n'est jamais mon truc et que je l'ai trouver sur un site et que j'ai plus ou moins essayr de l'incorporer a mon proje) donc tu saurais l'incorporer au code que j'ai poster en premier car je m'embrouille un peu heureusement j'ai saver mon proejt car a la fin plus rien n'allais mdr ^^

Merci d'avance
Diablaman

Re : systray caption refresh ? le 14/05/2006 12:32:06

Renfield
(Admin CS)
replace le type 'Donnees' par celui que je t'ai donné, remplace les valeurs en dur par les constantes...
renomme correctement les constantes existantes

et dans tmrRefresh_Timer fais :
        don.szTip = LblRam.Caption & vbCrLf & lblVirt.Caption
        Shell_NotifyIcon NIM_MODIFY, don

Renfield
Admin CodeS-SourceS - MVP Visual Basic

Re : systray caption refresh ? le 14/05/2006 16:16:25

diablamanshadow
ok mici ses plus clair maintenant ^^

Re : systray caption refresh ? le 14/05/2006 17:29:11

Renfield
(Admin CS)
content de voir que tu t'en es sortit....
c'est plus formateur, si tu le fais toi ^^


Renfield
Admin CodeS-SourceS - MVP Visual Basic


Classé sous : long, caption, mémoire, stxt, don

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS