Page 1 sur 2

Progressbar sensible au clic

Publié : mer. 02/févr./2005 14:47
par Pingtix
Salut !

Quelqun sait comment faire pour faire une progressbar sensible au clic ?
ce que je veux dire par là c'est que par exemple si je clique au milieu de la progressbar elle passe a 50%, si je clique tout a gauche elle passe a 0% et ainsi de suite.... un peu comme un trackbargadget sauf qu'il suffit de cliquer ou on veut sur le gadget pour choisir sa valeur.

Je suis certain que c'est possible, maintenant est-ce que c'est possible avec pb j'en sais rien !

A+

Publié : mer. 02/févr./2005 16:12
par KarLKoX
Il faut sousclasser la barre de progession avec SetWindowLong, tu passeras à cette API l'adresse de la fonction qui gèrera les évenements et la, tu n'auras plus qu'a intercepter les évenements qui t'interessent (WM_LBUTTONDOWN, WM_LBUTTONUP ...).

Publié : mer. 02/févr./2005 19:29
par Pingtix
La fonction qui gère les evenements ?? Je ne comprends pas vraiment...

Et si je récupère les evenements qui m'intéressent, je dois ensuite calculer moi meme à partir des coordonnées de la souris au moment du clic, à quel endroit il faut déplacer la barre ?

Publié : mer. 02/févr./2005 19:59
par nico
Ben c'est pas compliqué, suivant que la ProgressBar est vertical ou horizontal, tu n'as besoin que de la valeur de x ou y, tu convertis les coordonnées par rapport à la fenêtre du gadget et t'obtiens le pourcentage par rapport à la longueur du gadget.

Publié : mer. 02/févr./2005 20:58
par Pingtix
Ok !
Mais j'ai pas vraiment compris comment je dois utiliser SetWindowLong_()

Publié : mer. 02/févr./2005 21:10
par nico
Il y a des exemples sur le Forum.

Publié : mer. 02/févr./2005 22:49
par Le Soldat Inconnu
Oui mais il faut gérer l'affichage dans ce cas, je n'ai plus qui s'affiche chez moi.

Donc je suis passé comme ça

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
; 
; Explication du programme :
; Choisir la position d'une ProgressBar en cliquant dessus


Procedure SetCursor(WinID, IdCursor.l) ; modifie le curseur de la fenêtre en cours
  Cursor = LoadCursor_(0, IdCursor)
  SetClassLong_(WinID, #GCL_HCURSOR, Cursor)
EndProcedure

; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 100, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test1") = 0 Or CreateGadgetList(WindowID()) = 0
  End
EndIf

ProgressBarGadget(0, 10, 10, 280, 20, 0, 100)

SetCursor(GadgetID(0), #IDC_SIZEWE) ; On change le curseur quand on passe sur le gadget

Repeat
  Event = WaitWindowEvent()
  
  If Event = #WM_LBUTTONDOWN
    Select WindowFromPoint_(DesktopMouseX(), DesktopMouseY()) ; On regarde le gadget qui est sous la souris
      Case GadgetID(0)
        Distance = 100 * (WindowMouseX() - GadgetX(0)) / GadgetWidth(0) ; On calcul la position de la Pogressbar
        SetGadgetState(0, Distance) ; On change la valeur de la ProgressBar
        
    EndSelect
  EndIf
  
Until Event = #PB_EventCloseWindow

End

Publié : mer. 02/févr./2005 23:27
par nico

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu 
; Version de PB : 3.9 
; 
; Explication du programme : 
; Choisir la position d'une ProgressBar en cliquant dessus 

; Ajout de MouseMove by Nico

Procedure SetCursor(WinID, IdCursor.l) ; modifie le curseur de la fenêtre en cours 
  Cursor = LoadCursor_(0, IdCursor) 
  OldCursor=SetClassLong_(WinID, #GCL_HCURSOR, Cursor) 
  ProcedureReturn OldCursor
EndProcedure 

; Création de la fenêtre et de la GadgetList 
If OpenWindow(0, 0, 0, 300, 100, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test1") = 0 Or CreateGadgetList(WindowID()) = 0 
  End 
EndIf 

ProgressBarGadget(0, 10, 10, 280, 20, 0, 100) 

SetCursor(GadgetID(0), #IDC_SIZEWE) ; On change le curseur quand on passe sur le gadget 

Repeat 
  Event = WaitWindowEvent() 
  
  Select Event 
    Case #WM_LBUTTONDOWN 
      Select WindowFromPoint_(DesktopMouseX(), DesktopMouseY()) ; On regarde le gadget qui est sous la souris 
        Case GadgetID(0) 
          distance = 100 * (WindowMouseX() - GadgetX(0)) / GadgetWidth(0) ; On calcul la position de la Pogressbar 
          SetGadgetState(0, distance) ; On change la valeur de la ProgressBar 
          ProgressBar=#True
      EndSelect 
      
    Case #WM_MOUSEMOVE
      Select WindowFromPoint_(DesktopMouseX(), DesktopMouseY()) ; On regarde le gadget qui est sous la souris 
        Case GadgetID(0)
          If ProgressBar
            distance = 100 * (WindowMouseX() - GadgetX(0)) / GadgetWidth(0) ; On calcul la position de la Pogressbar 
            SetGadgetState(0, distance) ; On change la valeur de la ProgressBar 
          EndIf
          
        Default
          ProgressBar=0
      EndSelect 
      
  EndSelect 
Until Event = #PB_EventCloseWindow 
End

Publié : mer. 02/févr./2005 23:29
par Le Soldat Inconnu
Pas bête :)

Publié : mer. 02/févr./2005 23:33
par nico
Mouais mais on peut pas dire que je me sois foulé. :lol:

[Edit: j'ai enlevé #WM_LBUTTONUP et mis ProgressBar=0 dans #WM_MOUSEMOVE; c'est plus fonctionnel]

Publié : jeu. 03/févr./2005 0:03
par Le Soldat Inconnu
c'est l'idée qui compte :wink:

Publié : jeu. 03/févr./2005 21:07
par Pingtix
En plus, ca marche !
Merci !!

Publié : sam. 13/août/2005 14:56
par venom
bonjour, je fait remonter ce poste car j'ai une question a ce sujet :)
voila j'ai regarder vos exemple niquel rien a dire :wink: . j'ai reussi a integrer la fonction dans mon code mais le probleme c'est que je ne trouve pas la fonction qui fait suivre la musique avec la "progressbar" :( donc si vous connaisser la fonction ou si vous avez un tutos la dessus je verrer un peut plus 8O :) car j'ai beau chercher je ne trouve pas :cry: merci d'avance :wink: :D

Publié : dim. 14/août/2005 20:26
par Dr. Dri
Tu peux jeter un coup d'oeil à ma "lib" pour gérer des fichiers wave, y'a une version avec DirectX que je peux te compléter si tu veux pour changer la "position" du son...
http://purebasic.hmt-forum.com/viewtopic.php?t=3123

Dri ;)

Publié : mer. 17/août/2005 22:52
par venom
bonsoir Dr. Dri, bin le probleme c'est que je ne mis connais pas encore asser, je n'est jamer cree des programmes avec des libs. si tu pouvait me montrer un exemple, ou si tu veux je peut t'envoyer mon code pour que tu evite de t'en retaper un et que tu y regarde :wink:. faudrait qu'on voie sa ensemble. fin comme tu veut dit moi quoi . :D :wink:

desol pour le retard probleme d'internet :mad: :lol: