[OK] WindowEvent

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Guillot
Messages : 532
Inscription : jeu. 25/juin/2015 16:18

[OK] WindowEvent

Message par Guillot »

salut,

je pense qu'il y a un truc qui m'échappe
je cherche à connaitre l’état des boutons de la souris sur une fenetre
mais pas moyen
windowevent() renvoie les événements:
#PB_Event_RightClick
#PB_Event_LeftClick
...
mais rien au sujet de
LeftButtonDown
LeftButtonUp
MouseMove
...

avec canvasgadget :
EventType renvoie tous ce qu'on veut
(de même, GetGadgetAttribute et SetGadgetAttribute
permettent de connaitre / modifier de nombreuses infos (type de curseur souris, le mouvement de la molette...))

mais curieusement je n'arrive pas à faire de même avec les fenetres

je mettrai ce poste dans "Suggestions et améliorations" si effectivement y'a pas moyen d'acceder à ces infos
mais j'espere que j'ai loupé quelque chose...

quelqu'un pour m'aider ?
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: WindowEvent

Message par Ar-S »

Salut,
Sur une fenêtre tu peux utiliser dans ta boucle
#WM_LBUTTONDOWN - #WM_LBUTTONUP pour le bouton gauche
#WM_RBUTTONDOWN - #WM_RBUTTONUP pour le bouton droit
#WM_MBUTTONDOWN - #WM_MBUTTONUP pour le bouton du milieu

Mais c'est du windows only. Je ne crois pas qu'on puisse nativement sous PB
Que l'on me corrige si je me trompe.

Dans la doc il est uniquement indiqué :
#PB_Event_RightClick
#PB_Event_LeftClick
#PB_Event_LeftDoubleClick
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: WindowEvent

Message par Shadow »

Cadeau fais par mes soin :):

Code : Tout sélectionner

Enumeration 1
  
  #Fenetre
  
  #GadgetDebut
  
  ; Mettre uniquement ici toutes vos constantes de gadget (Entre #GadgetDebut et #GadgetFin)
  #Bouton
  
  #GadgetFin
  
EndEnumeration

; Les constantes des divers évènement possible
#PB_Event_MoveWindowMouse = 512
#PB_Event_WindowsLeftButtonDown = 513
#PB_Event_WindowsLeftButtonUp = 514
#PB_Event_WindowsLeftDoubleClick = 515
#PB_Event_WindowsRightButtonDown = 516
#PB_Event_WindowsRightButtonUp = 517
#PB_Event_WindowsRightDoubleClick = 518
#PB_Event_WindowsMiddleButtonDown = 519
#PB_Event_WindowsMiddleButtonUp = 520
#PB_Event_WindowsMiddleDoubleClick = 521
#PB_Event_WindowsMouseWheel = 522

#PB_Event_MouseMoveOverTitleBar = 160
#PB_Event_LeftButtonClickOverTitleBar = 161
#PB_Event_LeftButtonUpOverTitleBar = 162
#PB_Event_LeftButtonDoubleClickOverTitleBar = 163
#PB_Event_RightButtonClickOverTitleBar = 164
#PB_Event_RightButtonUpOverTitleBar = 165
#PB_Event_MiddleButtonDownOverTitleBar = 167
#PB_Event_MiddleButtonUpOverTitleBar = 168
#PB_Event_MiddleButtonDoubleClickOverTitleBar = 169
#PB_Event_MouseEnterOrLeaveWindows = 674
#PB_Event_NextPrevious = 0

; Procédure permettant de renvoyer le numéro du gadget ou se trouve la souris
Procedure.l MouseOverGadget() 
  For Gadget = #GadgetDebut + 1 To #GadgetFin - 1
    If IsGadget(Gadget)
      GetWindowRect_(GadgetID(Gadget),GadgetRect.RECT) 
      GetCursorPos_(mouse.POINT) 
      If mouse\x>=GadgetRect\Left And mouse\x<=GadgetRect\right And mouse\y>=GadgetRect\Top And mouse\y<=GadgetRect\bottom
        ProcedureReturn Gadget
      EndIf 
    EndIf
  Next
EndProcedure 

; Procédure permettant de renvoyer le numéro du gadget qui a le focus
Procedure.l GadgetFocus()
  For Gadget = #GadgetDebut + 1 To #GadgetFin - 1
    If IsGadget(Gadget)
      If GetActiveGadget() = Gadget
        ProcedureReturn Gadget 
      EndIf 
    EndIf
  Next
EndProcedure 

; Procédure permettant de renvoyer le type du gadget ou se trouve la souris
Procedure.s TypeGadget()
  For Gadget = #GadgetDebut + 1 To #GadgetFin - 1
    If IsGadget(Gadget)
      GetWindowRect_(GadgetID(Gadget),GadgetRect.RECT) 
      GetCursorPos_(mouse.POINT) 
      If mouse\x>=GadgetRect\Left And mouse\x<=GadgetRect\right And mouse\y>=GadgetRect\Top And mouse\y<=GadgetRect\bottom
        TypeGadget = GadgetType(Gadget)
        If TypeGadget = #PB_GadgetType_Button
          TypeGadget$ = "Button"
        ElseIf TypeGadget = #PB_GadgetType_ButtonImage
          TypeGadget$ = "ButtonImage"
        ElseIf TypeGadget = #PB_GadgetType_Calendar
          TypeGadget$ = "Calendar"
        ElseIf TypeGadget = #PB_GadgetType_CheckBox 
          TypeGadget$ = "CheckBox"
        ElseIf TypeGadget = #PB_GadgetType_ComboBox
          TypeGadget$ = "ComboBox"
        ElseIf TypeGadget = #PB_GadgetType_Container
          TypeGadget$ = "Container"
        ElseIf TypeGadget = #PB_GadgetType_Canvas
          TypeGadget$ = "Canvas"
        ElseIf TypeGadget = #PB_GadgetType_Date 
          TypeGadget$ = "Date"
        ElseIf TypeGadget = #PB_GadgetType_Editor
          TypeGadget$ = "Editor"
        ElseIf TypeGadget = #PB_GadgetType_ExplorerCombo
          TypeGadget$ = "ExplorerCombo"
        ElseIf TypeGadget = #PB_GadgetType_ExplorerList
          TypeGadget$ = "ExplorerList"
        ElseIf TypeGadget = #PB_GadgetType_ExplorerTree
          TypeGadget$ = "ExplorerTree"
        ElseIf TypeGadget = #PB_GadgetType_Frame
          TypeGadget$ = "Frame"
        ElseIf TypeGadget = #PB_GadgetType_HyperLink 
          TypeGadget$ = "HyperLink"
        ElseIf TypeGadget = #PB_GadgetType_Image
          TypeGadget$ = "Image"
        ElseIf TypeGadget = #PB_GadgetType_IPAddress
          TypeGadget$ = "IPAddress"
        ElseIf TypeGadget = #PB_GadgetType_ListIcon
          TypeGadget$ = "ListIcon"
        ElseIf TypeGadget = #PB_GadgetType_ListView 
          TypeGadget$ = "ListView "
        ElseIf TypeGadget = #PB_GadgetType_MDI
          TypeGadget$ = "MDI"
        ElseIf TypeGadget = #PB_GadgetType_Option
          TypeGadget$ = "Option"
        ElseIf TypeGadget = #PB_GadgetType_Panel
          TypeGadget$ = "Panel"
        ElseIf TypeGadget = #PB_GadgetType_ProgressBar 
          TypeGadget$ = "ProgressBar"
        ElseIf TypeGadget = #PB_GadgetType_Scintilla
          TypeGadget$ = "Scintilla"
        ElseIf TypeGadget = #PB_GadgetType_ScrollArea
          TypeGadget$ = "ScrollArea"
        ElseIf TypeGadget = #PB_GadgetType_ScrollBar
          TypeGadget$ = "ScrollBar"
        ElseIf TypeGadget = #PB_GadgetType_Spin
          TypeGadget$ = "Spin"
        ElseIf TypeGadget = #PB_GadgetType_Splitter
          TypeGadget$ = "Splitter"
        ElseIf TypeGadget = #PB_GadgetType_String
          TypeGadget$ = "String"
        ElseIf TypeGadget = #PB_GadgetType_Text
          TypeGadget$ = "Text"
        ElseIf TypeGadget = #PB_GadgetType_TrackBar
          TypeGadget$ = "TrackBar"
        ElseIf TypeGadget = #PB_GadgetType_Tree
          TypeGadget$ = "Tree"
        ElseIf TypeGadget = #PB_GadgetType_Web 
          TypeGadget$ = "Web"
        ElseIf TypeGadget = #PB_GadgetType_Unknown
          TypeGadget$ = "Unknown"
        EndIf
      EndIf
      ProcedureReturn TypeGadget$ 
    EndIf
  Next
EndProcedure 

Procedure Ma_Fenetre()
  If OpenWindow(#Fenetre, 327, 177, 500, 300, "fenêtre windows",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_TitleBar)
    ButtonGadget(#Bouton, 50, 50, 100, 25, "Bouton")
    
    Repeat ; Départ des évènements de boucle
      
      EventWindows = WaitWindowEvent() ; Cette ligne attend pendent (Minuteur) qu'un évènement soit recus par la fenêtre
      WindowID = EventWindow() ; La fenêtre oû l'évènement c'est produit
      GadgetID = EventGadget() ; Pour savoir sur quel gadget c'est produis l'évènement
      MenuID = EventMenu() ; Pour savoir sur quel menue c'est produis l'évènement
      EventType = EventType() ; Le type d'évènement qui c'est produis sur le gadget
      EventTimer = EventTimer() ; Le numéro du timer ou s'est produit l'évènement (Le temps du minuteur s'est écoulé)
      MouseOverGadget = MouseOverGadget() ; Le numéro du gadget ou se trouve la souris
      FocusGadget = GadgetFocus() ; Le numéro du gadget qui a le focus
      GadgetType$ = TypeGadget() ; Le type du gadget ou se trouve la souris
      
      ClearDebugOutput()
      
      Debug "La souris se trouve actuellement sur le gadget: " + Str(MouseOverGadget)
      Debug "Le type de se gadget est: " + GadgetType$
      Debug "Le gadget qui a actuellement le focus est: " + Str(FocusGadget)
      
      If EventWindows = #PB_Event_Gadget ; Un évènement c'est passé sur un gadget
        
        If GadgetID = #Bouton
          
        ElseIf GadgetID = 0
          
        EndIf
        
      ElseIf EventWindows = #PB_Event_Menu ; Un menu a été sélectionné
        
        If MenuID = 0
          
        ElseIf MenuID = 0
          
        EndIf
        
      ElseIf EventWindows = #PB_Event_SysTray ; Une icône dans la zone SysTray a été cliquée 
        
      ElseIf EventWindows = #PB_Event_Timer ; Le temps d'un minuteur s'est écoulé
        
      ElseIf EventWindows = #PB_Event_Repaint ; Tout ou une partie du contenu de la fenêtre a été détruit et doit être reconstitué
        
      ElseIf EventWindows = #PB_Event_MoveWindow ; La fenêtre a été déplacée
        
      ElseIf EventWindows = #PB_Event_MinimizeWindow ; La fenêtre a été minimisée
        
      ElseIf EventWindows = #PB_Event_MaximizeWindow ; La fenêtre a été maximisée
        
      ElseIf EventWindows = #PB_Event_RestoreWindow ; La fenêtre a été restaurée à sa taille normale
        
      ElseIf EventWindows = #PB_Event_SizeWindow ; La fenêtre a été redimensionnée
        
      ElseIf EventWindows = #PB_Event_ActivateWindow ; La fenêtre a été activée (gain du focus)
        
      ElseIf EventWindows = #PB_Event_WindowDrop ; Une opération Glisser & Déposer s'est terminée sur une fenêtre
        
      ElseIf EventWindows = #PB_Event_GadgetDrop ; Une opération Glisser & Déposer s'est terminée sur un gadget
        
      ElseIf EventWindows = #PB_Event_CloseWindow ; L'icône de fermeture de la fenêtre a été cliquée
        
      ElseIf EventWindows = #PB_Event_MoveWindowMouse ; Déplacement de la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsLeftButtonDown ; Bouton gauche appuyer avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsLeftButtonUp ; Bouton gauche relacher avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsLeftDoubleClick ; Double clique gauche avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsRightButtonDown ; Bouton droit appuyer avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsRightButtonUp ; Bouton droit relacher avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsRightDoubleClick ; Double clique droit avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsMiddleButtonDown ; Bouton milieux appuyer avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsMiddleButtonUp ; Bouton milieux relacher avec la souris sur la fenêtre
        
      ElseIf EventWindows = #PB_Event_WindowsMiddleDoubleClick ; Double clique milieux avec la souris sur la fenêtre 
        
      ElseIf EventWindows = #PB_Event_WindowsMouseWheel ; La molêtte de la souris tourne
        
      ElseIf EventWindows = #PB_Event_MouseMoveOverTitleBar ; Déplacement de la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_LeftButtonClickOverTitleBar ; Clique gauche avec la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_LeftButtonUpOverTitleBar ; Bouton gauche relacher avec la souris sur la barre de titre de la fenêtre*
        
      ElseIf EventWindows = #PB_Event_LeftButtonDoubleClickOverTitleBar ; Double Clique gauche avec la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_RightButtonClickOverTitleBar ; Clique droit avec la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_RightButtonUpOverTitleBar ; Bouton droit relacher avec la souris sur la barre de titre de la fenêtre*
        
      ElseIf EventWindows = #PB_Event_MiddleButtonDownOverTitleBar ; Bouton milieux appuyer avec la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_MiddleButtonUpOverTitleBar ; Bouton milieux relacher avec la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_MiddleButtonDoubleClickOverTitleBar ; Double Clique milieux avec la souris sur la barre de titre de la fenêtre
        
      ElseIf EventWindows = #PB_Event_MouseEnterOrLeaveWindows ; La souris viens d'entrer ou de quitter la fenêtre
        
      EndIf
      
    Until EventWindows = #PB_Event_CloseWindow ; Fin des évènements de boucle
    
  EndIf
EndProcedure

Ma_Fenetre()
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Re: WindowEvent

Message par SPH »

Heuuu ! C'est moi ou le ElseIf pique les yeux :?:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: WindowEvent

Message par falsam »

SPH a écrit :Heuuu ! C'est moi ou le ElseIf pique les yeux :?:
Pas que ElseIf :p

@Shadow :

#PB_Event_WindowsLeftButtonDown = 513 ou #WM_LBUTTONDOWN c'est la même chose.
#PB_Event_WindowsLeftButtonUp = 514 ou #WM_LBUTTONUP c'est la même chose.
etc ....
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: WindowEvent

Message par falsam »

Code : Tout sélectionner

OpenWindow(0, 0, 0, 800, 700, "#WM etc ....", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
ButtonGadget(#PB_Any, 5, 5, 80, 20, "One")
ButtonGadget(#PB_Any, 5, 25, 80, 20, "Two")
ButtonGadget(#PB_Any, 5, 45, 80, 20, "Three")
StringGadget(#PB_Any, 5, 70, 200, 22, "")

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow
      End
      
    Case #WM_MOUSEMOVE 
      Debug "#WM_MOUSEMOVE " + Str(EventwParam()) 
      Debug "#WM_MOUSEMOVE " + Str(EventlParam()) 
      
    Case #WM_LBUTTONDBLCLK  
      Debug "#WM_LBUTTONDBLCLK " + Str(EventwParam()) 
      Debug "#WM_LBUTTONDBLCLK " + Str(EventlParam()) 
      
    Case #WM_LBUTTONDOWN  
      Debug "#WM_LBUTTONDOWN " + Str(EventwParam()) 
      Debug "#WM_LBUTTONDOWN " + Str(EventlParam()) 
      
    Case #WM_LBUTTONUP  
      Debug "#WM_LBUTTONUP " + Str(EventwParam()) 
      Debug "#WM_LBUTTONUP " + Str(EventlParam()) 
      
    Case #WM_RBUTTONDOWN  
      Debug "#WM_RBUTTONDOWN " + Str(EventwParam()) 
      Debug "#WM_RBUTTONDOWN " + Str(EventlParam()) 
      
    Case #WM_RBUTTONUP 
      Debug "#WM_RBUTTONUP" + Str(EventwParam()) 
      Debug "#WM_RBUTTONUP" + Str(EventlParam()) 
      
    Case #WM_MBUTTONDBLCLK 
      Debug "#WM_MBUTTONDBLCLK " + Str(EventwParam()) 
      Debug "#WM_MBUTTONDBLCLK " + Str(EventlParam()) 
      
    Case #WM_NCMOUSEMOVE 
      Debug "#WM_NCMOUSEMOVE " + Str(EventwParam()) 
      Debug "#WM_NCMOUSEMOVE " + Str(EventlParam()) 
      
    Case #WM_NCLBUTTONDBLCLK 
      Debug "#WM_NCLBUTTONDBLCLK " + Str(EventwParam()) 
      Debug "#WM_NCLBUTTONDBLCLK " + Str(EventlParam()) 
      
    Case #WM_ACTIVATE 
      Debug "#WM_ACTIVATE " +Str(EventwParam()) 
      Debug "#WM_ACTIVATE " +Str(EventlParam()) 
      
    Case #WM_CHAR 
      Debug "#CHAR w:    " + Str(EventwParam()) 
      Debug "#CHAR l:    " + Str(EventlParam()) 
      
    Case #WM_DEADCHAR ;Caractères hors-système
      Debug "#DEADCHAR:   " + Str(EventwParam()) 
      
    Case #WM_KEYDOWN 
      Debug "#KEYDOWN: " + Str(EventwParam()) 
      Debug "#KEYDOWN: " + Str(EventlParam()) 
      
    Case #WM_KEYUP 
      Debug "#KEYUP:   " + Str(EventwParam()) 
      
    Case #WM_SYSCHAR 
      Debug "#SYSCHAR:   " + Str(EventwParam()) 
      
    Case #WM_SYSDEADCHAR  
      Debug "#SYDEADSCHAR:   " + Str(EventwParam()) 
      
    Case #WM_SYSKEYDOWN  ;Exemple Alt
      Debug "#SYSKEYDOWN:   " + Str(EventwParam()) 
      
    Case #WM_SYSKEYUP 
      Debug "#SYSKEYUP:   " + Str(EventwParam()) 
  EndSelect 
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: WindowEvent

Message par Micoute »

Qu'il est bavard ce programme, j'adore, grand merci pour le partage.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: WindowEvent

Message par Zorro »

Je rappel qu'il existe sur le forum un index des tutos qui se trouve ici :
http://www.purebasic.fr/french/viewtopic.php?f=1&t=6664
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Guillot
Messages : 532
Inscription : jeu. 25/juin/2015 16:18

Re: WindowEvent

Message par Guillot »

merci les gars
ça répond à mes besoins
(c'est juste dommage que ça soit pas multiplatforme...)

ah, pinaise j'avais jamais vu ces tutos
interressant
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: WindowEvent

Message par falsam »

Pour le travail de groupe j'ai opté maintenant pour GitHub. Travailler sur GitHub est maintenant à la portée de tout le monde. Une fois le compte créer un simple drag & drop permet de transférer un dossier ou un fichier.
http://www.purebasic.fr/french/viewtopi ... 97#p182397

Il est possible de créer une organisation sur GitHub comportant plusieurs collaborateurs.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: WindowEvent

Message par Ar-S »

Topic nettoyé.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre