Hello !
Pour ton souci, il se règle en trois parties :
1) Rendre la progress bar cliquable : Il y a une petite restriction dans le code de l'UDF, au moment de la création de la progress bar, change la ligne
GUICtrlSetStyle(-1, 0) par
GUICtrlSetStyle(-1, 0x0100) ; StaticConstants.au3 : 0x0100 = $SS_NOTIFY (A changer dans le fichier "GDIpProgress.au3").
2) Récupérer le handle de la progress bar : Ce que tu récupères en retour de la fonction _ProgressCreate n'est pas l'identifiant de ta progress bar, mais un indice dans le tableau récapitulatif de toutes les progress bars customisées que tu as créées. Voici une fonction qui te retournera le handle voulu :
Code : Tout sélectionner
Func getProgressCtrlId($index)
If IsDeclared("_Progress_Bars") Then
If UBound($_Progress_Bars,1) > $index And UBound($_Progress_Bars,0) = 2 Then Return $_Progress_Bars[$index][0]
SetError(1,0,0)
EndIf
SetError(1,0,0)
EndFunc
Grace à cette fonction, tu pourras détecter un appel à ta progress bar de façon classique dans ton code.
► Afficher le texteExemple
Code : Tout sélectionner
[...]
$sID = _ProgressCreate(10, 60, 300, 40)
_ProgressSetText($sID, "Install %P%%")
$sIDCtrl = getProgressCtrlId($sID)
[...]
While True
$msg = GUIGetMsg()
Switch $msg
Case $btn_0
_ProgressSet($sID, 0)
GUICtrlSetData($slid, 0)
[...]
Case $sIDCtrl
MsgBox(0,"ProgressBar","Vous avez cliqué sur"&@CRLF&"la progress bar id:"&$sIDCtrl&"!")
Case Else
[...]
EndSwitch
WEnd
Facile, non? ^^
3) Détecter un position de clic relative à la taille totale : Bah oui, faut bien détecter où tu as cliqué dans la bar pour savoir si tu veux revenir au premier quart ou écouter les 10 dernières secondes ^^ Pour ça, rien de bien compliqué, juste des maths de bases : Deux fonctions à ajouter, et un appel pour chopper la valeur de pourcentage
► Afficher le texteFonctions
Code : Tout sélectionner
Func getRelativePercent($handle, $control)
Local $values = GUIGetCursorInfo($handle)
If @error Or $values[4] <> $control Then Return 0
Local $rect = getControlCoords($handle, $control, True)
If @error Then Return 0
Local $x = $values[0], $y = $values[1]
If $rect[0]<=$x And $x<=$rect[0]+$rect[2] And $rect[1]<=$y And $y<=$rect[1]+$rect[3] Then
Return Round(100*($x-$rect[0])/$rect[2])
Else
Return 0
EndIf
EndFunc
Func getControlCoords($handle="", $control="",$relative=False)
Local $pos = ControlGetPos($handle, "", $control)
If @error Then
SetError(1)
Return
EndIf
If $relative Then Return $pos
Local $winpos = WinGetPos($handle)
Local $resultat[4] = [$winpos[0]+$pos[0],$winpos[1]+$pos[1], $pos[2],$pos[3]]
Return $resultat
EndFunc
► Afficher le texteAppel
Code : Tout sélectionner
While True
$msg = GUIGetMsg()
Switch $msg
Case $btn_0
_ProgressSet($sID, 0)
GUICtrlSetData($slid, 0)
[...]
Case $sIDCtrl
Local $percent = getRelativePercent($Gui, $sIDCtrl)
_ProgressSet($sID, $percent)
GUICtrlSetData($slid, $percent)
MsgBox(0,"ProgressBar","Vous avez cliqué sur"&@CRLF&"la progress bar id:"&$sIDCtrl&"!"&@CRLF&@CRLF&"Pourcentage selectionné:"&$percent&"%")
Case Else
[...]
EndSwitch
WEnd
Voili voilou ! Je pense que tu t'en sortiras avec ces exemples. Si tu as d'autres soucis, copie ton code au passage, ça sera plus simple que de partir from scratch comme je viens de le faire
A bientôt !