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é.
[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

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

. 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

car j'ai beau chercher je ne trouve pas

merci d'avance

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