ich hab den Beispielcode von ts-soft mal um die ThumbButton Funktionalitaet erweitert,
war dabei aber leider nicht so ganz erfolgreich. Und da dass hier das Windowsforum ist
und nicht das Snippetsforum wollte ich euch meinen Fortschritt mitteilen, evtl sieht jemand
meinen Fehler^^
Code: Alles auswählen
EnableExplicit
#TBPF_NOPROGRESS = $0
#TBPF_INDETERMINATE = $1
#TBPF_NORMAL = $2
#TBPF_ERROR = $4
#TBPF_PAUSED = $8
Interface ITaskbarList3 Extends ITaskbarList2
SetProgressValue.i(hWnd.i, ullCompleted.q, ullTotal.q)
SetProgressState.i(hWnd.i, tbpFlags.l)
RegisterTab.i(hWndTab.i, hWndMDI.i)
UnregisterTab.i(hWndTab.i)
SetTabOrder.i(hWndTab.i, hWndInsertBefore.i)
SetTabActive.i(hWndTab.i, hWndMDI.i, tbatFlags.l)
ThumbBarAddButtons.i(hWnd.i, cButtons.l, *pButton)
ThumbBarUpdateButtons.i(hWnd.i, cButtons.l, *pButton)
ThumbBarSetImageList.i(hWnd.i, himl.i)
SetOverlayIcon.i(hWnd.i, hIcon.i, pszDescription.s)
SetThumbnailTooltip.i(hWnd.i, pszTip.s)
SetThumbnailClip.i(hWnd.i, *prcClip)
EndInterface
Structure THUMBBUTTON
dwMask.l
iId.l
iBitmap.l
hIcon.i
szTip.s{260}
dwFlags.l
EndStructure
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
Procedure TaskBarProgress(hWnd, flag = #TBPF_NORMAL)
Protected ptl.ITaskbarList3
Protected Dim bp.THUMBBUTTON(2)
bp(0)\dwMask = 10
bp(0)\iId = 4
bp(0)\iBitmap = 0
bp(0)\hIcon = ImageID(LoadImage(#PB_Any,"kreis.ico"))
bp(0)\szTip = "Test"
bp(0)\dwFlags = 0
bp(1)\dwMask = 10
bp(1)\iId = 5
bp(1)\iBitmap = 0
bp(1)\hIcon = ImageID(LoadImage(#PB_Any,"viereck.ico"))
bp(1)\szTip = "Test2"
bp(1)\dwFlags = 0
If OSVersion() >= #PB_OS_Windows_7
CoCreateInstance_(?CLSID_TaskBarList, 0, 1, ?IID_ITaskBarList3, @ptl)
If ptl
ptl\HrInit()
ptl\SetProgressValue(hWnd, 0, 100)
ptl\SetProgressState(hWnd, flag)
ptl\ThumbBarAddButtons(hWnd, 2, @bp())
EndIf
EndIf
ProcedureReturn ptl
EndProcedure
Procedure TBP_SetState(hWnd, ptl.ITaskbarList3, state)
If ptl
Select state
Case #TBPF_NOPROGRESS, #TBPF_INDETERMINATE, #TBPF_NORMAL, #TBPF_ERROR, #TBPF_PAUSED
ptl\SetProgressState(hWnd, state)
EndSelect
EndIf
EndProcedure
Procedure TBP_SetValue(hWnd, ptl.ITaskbarList3, value)
If ptl
If value < 0 : value = 0 : EndIf
If value > 100 : value = 100 : EndIf
ptl\SetProgressValue(hWnd, value, 100)
EndIf
EndProcedure
Procedure TBP_Release(ptl.ITaskbarList3)
If ptl
ptl\Release()
ptl = 0
EndIf
EndProcedure
; example
Define TBP, progress, pause = 1
Define hIcon = ExtractIcon_(GetModuleHandle_(0), #PB_Compiler_Home + "PureBasic.exe", 0)
OpenWindow(0, #PB_Ignore, #PB_Ignore, 265, 30, "Example", #PB_Window_SystemMenu)
SendMessage_(WindowID(0), #WM_SETICON, 0, hIcon)
ButtonGadget(1, 5, 5, 80, 20, "start")
ButtonGadget(2, 90, 5, 80, 20, "stop")
ButtonGadget(3, 175, 5, 80, 20, "pause")
TBP = TaskBarProgress(WindowID(0), #TBPF_NOPROGRESS)
Define e.l
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
TBP_Release(TBP)
DestroyIcon_(hIcon)
Break
Case #PB_Event_Gadget
e = EventGadget()
Debug e
Select e
Case 0
Debug "test"
Case 1 ; start
AddWindowTimer(0, 1, 100)
Case 2 ; stop
RemoveWindowTimer(0, 1)
TBP_SetState(WindowID(0), TBP, #TBPF_NOPROGRESS)
progress = 0
Case 3 ; pause
pause ! 1
If pause
AddWindowTimer(0, 1, 100)
TBP_SetState(WindowID(0), TBP, #TBPF_NORMAL)
SetGadgetText(2, "pause")
Else
RemoveWindowTimer(0, 1)
TBP_SetState(WindowID(0), TBP, #TBPF_PAUSED)
SetGadgetText(2, "weiter")
EndIf
EndSelect
Case #PB_Event_Timer
progress + 1
If progress > 100 : progress = 0 : EndIf
TBP_SetState(WindowID(0), TBP, #TBPF_NORMAL)
TBP_SetValue(WindowID(0), TBP, progress)
EndSelect
ForEver
viereck.ico im sourceordner notwendig) und beide geben bei einem Klick ein
WindowEvent = #PB_Event_Gadget mit EventGadget() = 0 zurueck.