Barre de progression sur l'icône de la barre des tâches

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Barre de progression sur l'icône de la barre des tâches

Message par Le Soldat Inconnu »

Salut,

Un petit exemple pour ajouter une ProgressBar sur l'icône de la barre des tâches d'une fenêtre.
Uniquement pour Windows 7 et plus

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4.50
;
; Explication du programme :
; Barre de progression sur l'icone dans la barre des tâches

Procedure SetProgressTaskBar(hWnd, State)
	; State = 0 : Pas de barre de progression
	; State = 1 : Barre de progression uniquement pour afficher une activité sans indiqué de % de progression
	; State = 2 : Barre de progression normale
	; State = 4 : Arrêt de la progression à cause d'une erreur
	; State = 8 : Progression en pause, attente de l'utilisateur
	
	Interface ITaskbarList3 Extends ITaskbarList2 
		SetProgressValue(hWnd, ullCompleted.q, ullTotal.q) 
		SetProgressState(hWnd, tbpFlags.l) 
		RegisterTab(hWndTab, hWndMDI) 
		UnregisterTab(hWndTab) 
		SetTabOrder(hWndTab, hWndInsertBefore) 
		SetTabActive(hWndTab, hWndMDI, dwreserved.l) 
		ThumbBarAddButtons(hWnd, cButtons.l, *pButton ) 
		ThumbBarUpdateButtons(hWnd,cButtons.l, *pButton) 
		ThumbBarSetImageList(hWnd, himl) 
		SetOverlayIcon(hWnd, hIcon, pszDescription.p-bstr) 
		SetThumbnailTooltip(hWnd, pszTip.p-bstr) 
		SetThumbnailClip(hWnd, *prcClip.RECT) 
	EndInterface 
	
	Protected TBL.ITaskbarList3
	
	If OSVersion() >= #PB_OS_Windows_7
		CoInitialize_(0)
		If CoCreateInstance_(?CLSID_TaskBarList, 0, 1, ?IID_ITaskBarList3, @TBL) = #S_OK
			TBL\HrInit()
			TBL\SetProgressState(hWnd, State)
			TBL\Release()
		EndIf
		CoUninitialize_()
	EndIf
	
	DataSection
		CLSID_TaskBarList:
		Data.l $56FDF344
		Data.w $FD6D, $11D0
		Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
		IID_ITaskBarList3:
		Data.l $EA1AFB91
		Data.w $9E28, $4B86
		Data.b $90, $E9, $9E, $9F, $8A, $5E, $EF, $AF
	EndDataSection
EndProcedure

Procedure SetProgressTaskBarValue(hWnd, Completed.q, Total.q)

	Protected TBL.ITaskbarList3
	
	If OSVersion() >= #PB_OS_Windows_7
		CoInitialize_(0)
		If CoCreateInstance_(?CLSID_TaskBarList, 0, 1, ?IID_ITaskBarList3, @TBL) = #S_OK
			TBL\HrInit()
			TBL\SetProgressValue(hWnd, Completed, Total)
			TBL\Release()
		EndIf
		CoUninitialize_()
	EndIf

EndProcedure

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

TextGadget(0, 0, 0, 300, 16, "Bare de progression sur l'icône de la barre des tâches :")
ComboBoxGadget(1, 0, 16, 300, 24)
AddGadgetItem(1, -1, "Aucune barre de progression")
AddGadgetItem(1, -1, "Barre de progression pour indiquer une activité")
AddGadgetItem(1, -1, "Barre de progression normale")
AddGadgetItem(1, -1, "Barre de progression : Erreur")
AddGadgetItem(1, -1, "Barre de progression : En pause")
SetGadgetState(1, 0)
TrackBarGadget(2, 0, 40, 300, 32, 0, 100)
SetGadgetState(2, 50)
HideGadget(2, 1)

Repeat
  Event = WaitWindowEvent()
  
  Select Event 
		Case #PB_Event_Gadget
      Select EventGadget() ; Gadgets
				Case 1
					Position = GetGadgetState(1)
					If Position >= 0 And Position <> GetGadgetData(1)
						
						HideGadget(2, 1)
						
						Select Position
							Case 0
								SetProgressTaskBar(WindowID(0), 0)
								
							Case 1
								SetProgressTaskBar(WindowID(0), 1)
								
							Case 2
								SetProgressTaskBar(WindowID(0), 2)
								HideGadget(2, 0)
								SetProgressTaskBarValue(WindowID(0), GetGadgetState(2) - GetGadgetAttribute(2, #PB_TrackBar_Minimum), GetGadgetAttribute(2, #PB_TrackBar_Maximum) - GetGadgetAttribute(2, #PB_TrackBar_Minimum))
								
							Case 3
								SetProgressTaskBar(WindowID(0), 4)
								HideGadget(2, 0)
								SetProgressTaskBarValue(WindowID(0), GetGadgetState(2) - GetGadgetAttribute(2, #PB_TrackBar_Minimum), GetGadgetAttribute(2, #PB_TrackBar_Maximum) - GetGadgetAttribute(2, #PB_TrackBar_Minimum))
								
							Case 4
								SetProgressTaskBar(WindowID(0), 8)
								HideGadget(2, 0)
								SetProgressTaskBarValue(WindowID(0), GetGadgetState(2) - GetGadgetAttribute(2, #PB_TrackBar_Minimum), GetGadgetAttribute(2, #PB_TrackBar_Maximum) - GetGadgetAttribute(2, #PB_TrackBar_Minimum))
								
						EndSelect
						
						SetGadgetData(1, Position)
					EndIf
					
				Case 2
					SetProgressTaskBarValue(WindowID(0), GetGadgetState(2) - GetGadgetAttribute(2, #PB_TrackBar_Minimum), GetGadgetAttribute(2, #PB_TrackBar_Maximum) - GetGadgetAttribute(2, #PB_TrackBar_Minimum))
			EndSelect
	EndSelect
  
Until Event = #PB_Event_CloseWindow
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)]
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Barre de progression sur l'icône de la barre des tâches

Message par falsam »

Pas mal du tout !!!!! Merci pour ce partage
Configuration : Windows 11 Famille 64-bit - PB 6.20 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
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Barre de progression sur l'icône de la barre des tâches

Message par venom »

Wouahh génial ce code 8)
Merci LSI c'est très pratique :wink:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Re: Barre de progression sur l'icône de la barre des tâches

Message par Droopy »

Merci, ça peut être utile. :D
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Barre de progression sur l'icône de la barre des tâches

Message par Le Soldat Inconnu »

Est-ce que quelqu'un peut lancer ce code sur Window XP ou Vista pour vérifier qu'il ne plante pas ? (Mais il ne va rien se passer car la fonction n'est que pour 7)
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)]
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Barre de progression sur l'icône de la barre des tâches

Message par GallyHC »

Bonjour,

Je viens de le compiler sur XP et apar qu'il ne ce passe pas grand chose au changement de la combobox, il n'y a pas d'erreur qui sont générés.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Barre de progression sur l'icône de la barre des tâches

Message par nico »

Fonctionne nickel, tester sur window 7
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Barre de progression sur l'icône de la barre des tâches

Message par Ar-S »

Merci c'est excellent.
~~~~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
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Re: Barre de progression sur l'icône de la barre des tâches

Message par Atomo »

Merci pour le code, ça a l'air de fonctionner :)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Barre de progression sur l'icône de la barre des tâches

Message par Kwai chang caine »

Le Soldat Inconnu a écrit :Est-ce que quelqu'un peut lancer ce code sur Window XP ou Vista pour vérifier qu'il ne plante pas ? (Mais il ne va rien se passer car la fonction n'est que pour 7)
Exact...tout va bien du coté de VISTA....y se passe rien :D
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre