Progressbar sensible au clic

Programmation d'applications complexes
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Progressbar sensible au clic

Message 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+
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message 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 ...).
"Qui baise trop bouffe un poil." P. Desproges
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Message 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 ?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Message par Pingtix »

Ok !
Mais j'ai pas vraiment compris comment je dois utiliser SetWindowLong_()
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Il y a des exemples sur le Forum.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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
Dernière modification par nico le mer. 02/févr./2005 23:35, modifié 1 fois.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Pas bête :)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

c'est l'idée qui compte :wink:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Message par Pingtix »

En plus, ca marche !
Merci !!
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message 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
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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 ;)
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message 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:
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre