Seite 1 von 3

Re: [Win7] Taskbar-Schaltfläche animieren

Verfasst: 07.11.2009 17:07
von DarkDragon
Sorry für Doppelpost, ich will aber dass es jeder mitbekommt. Ich habs geschafft! Der Beispielcode ist noch alles andere als sauber aber es funktioniert

Code: Alles auswählen

; Author: DarkDragon

Interface ITaskbarList3 Extends ITaskbarList2
  SetProgressValue(hWnd, Completed.q, Total.q)
  SetProgressState(hWnd, Flags.l)
  RegisterTab(hWndTab, hWndMDI)
  UnregisterTab(hWndTab)
  SetTabOrder(hWndTab, hwndInsertBefore)
  SetTabActive(hWndTab, hWndMDI, dwReserved.l)
  ThumbBarAddButtons(hWnd, cButtons, *pButtons)
  ThumbBarUpdateButtons(hWnd, cButtons, *pButtons)
  ThumbBarSetImageList(hWnd, himl)
  SetOverlayIcon(hWnd, hIcon, pszDescription.s)
  SetThumbnailTooltip(hWnd, pszTip.s)
  SetThumbnailClip(hWnd, *prcClip.RECT)
EndInterface

#TBPF_NoProgress    = $00
#TBPF_Indeterminate = $01
#TBPF_Normal        = $02
#TBPF_Error         = $04
#TBPF_Paused        = $08

#CLSCTX_INPROC_SERVER = 1
#CLSCTX_LOCAL_SERVER  = 4
#CLSCTX_SERVER        = #CLSCTX_INPROC_SERVER | #CLSCTX_LOCAL_SERVER

OpenWindow(0, 10, 0, 300, 50, "Test")

CoInitialize_(0)

*tb.ITaskbarList3
ret = CoCreateInstance_(?CLSID_TaskbarList, 0, #CLSCTX_SERVER, ?IID_ITaskbarList, @*tb)
If ret = 0
  *tb\SetProgressState(WindowID(0), #TBPF_Normal)
Else
  Debug "Error:"
  Debug ret
EndIf

i = 0
Repeat
  i + 1
 
  *tb\SetProgressValue(WindowID(0), i % 1000, 1000)
 
  Event = WindowEvent()
  Select Event
    Case #PB_Event_CloseWindow
      Break
  EndSelect
  Delay(1)
ForEver

CoUninitialize_()

End

DataSection
  CLSID_TaskbarList:
    ; 56FDF344-FD6D-11D0-958A-006097C9A090
    Data.l $56FDF344
    Data.w $FD6D, $11D0, $8A95
    Data.b $00, $60, $97, $C9, $A0, $90
  IID_ITaskbarList:
    ; {56FDF342-FD6D-11D0-958A-006097C9A090}
    Data.l $56FDF342
    Data.w $FD6D, $11D0, $8A95
    Data.b $00, $60, $97, $C9, $A0, $90
EndDataSection
Da geht noch weitaus mehr wenn man sich da einarbeitet. Auch solche Buttons etc. macht man glaube ich damit ins Vorschaufenster.

[EDIT]
Code geupdated.

Re: [Win7] Taskbar-Schaltfläche animieren

Verfasst: 07.11.2009 18:26
von Kai
Stürzt bei mir leider sofort mit der Meldung 'Das mit dem Debugger getestete Executable endete unerwartet.' ab.

Windows 7 Ultimate x86

Re: [Win7] Taskbar-Schaltfläche animieren

Verfasst: 07.11.2009 18:33
von DarkDragon
Kai hat geschrieben:Stürzt bei mir leider sofort mit der Meldung 'Das mit dem Debugger getestete Executable endete unerwartet.' ab.

Windows 7 Ultimate x86
Steht da irgendwo eine Zeile drin? Oder kannst du das durchsteppen (Vllt durch einfügen eines breakpoints bzw CallDebugger oben am source)?

[EDIT]
Ich habs. Hab den Code angepasst.

Re: [Win7] Taskbar-Schaltfläche animieren

Verfasst: 07.11.2009 18:45
von RSBasic
Hallo DarkDragon,


wow, cool, vielen Dank für dein Code :allright:
Funktioniert hier einwandfrei.
Danke nochmal :D

Re: [Win7] Taskbar-Schaltfläche animieren

Verfasst: 07.11.2009 19:04
von Kai
Nun läuft es 1A :allright:

Re: [Win7] Taskbar-Schaltfläche animieren

Verfasst: 08.11.2009 21:18
von Deluxe0321
Läuft hier ohne mukken, danke dafür xD
Mal sehn ob ich jetzt dank dir die anderen Funktionen hinbekomme.

Edit: Ich peil nicht ganz wie ich Buttons hinzufügen kann (wie in Itunes/WMP). Die Buttons werden zwar erstellt, aber es wird kein Icon hinzugefügt, bzw. angezeigt. Und der Tooltip ist ein Haufen chinesicher Text.

Grüße Marv

Re: [Win7] Taskbar-Schaltfläche animieren

Verfasst: 14.11.2009 23:32
von marco2007
@DD: ..hab`s zwar noch nicht probiert, aber wenn`s funktioniert: Respekt :allright:
-> Codearchiv!

Re: [Win7] Taskbar-Schaltfläche animieren

Verfasst: 17.11.2009 21:42
von KatSeiko
Fehlt nur noch, dass ein paar einfache Befehle aufgenommen werden... SetSuperbarProgress(WindowID(), Progress, ProgressType) und sowas...

Re: [Win7] Taskbar-Schaltfläche animieren

Verfasst: 06.03.2012 15:28
von ts-soft
KatSeiko hat geschrieben:Fehlt nur noch, dass ein paar einfache Befehle aufgenommen werden... SetSuperbarProgress(WindowID(), Progress, ProgressType) und sowas...
Jahre später ... :lol:

Hier mal meine Implementation, hab die Progress-Werte auf 0 - 100 festgesetzt.

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

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
  
  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)
    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(0, 5, 5, 80, 20, "start")
ButtonGadget(1, 90, 5, 80, 20, "stop")
ButtonGadget(2, 175, 5, 80, 20, "pause")

TBP = TaskBarProgress(WindowID(0), #TBPF_NOPROGRESS)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      TBP_Release(TBP)
      DestroyIcon_(hIcon)
      Break
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 0 ; start
          AddWindowTimer(0, 1, 100)
        Case 1 ; stop
          RemoveWindowTimer(0, 1)
          TBP_SetState(WindowID(0), TBP, #TBPF_NOPROGRESS)
          progress = 0
        Case 2 ; 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

Re: [Win7] Taskbar-Schaltfläche animieren

Verfasst: 06.03.2012 16:57
von Derren
Witzig.
Wurde vor 2 Tagen im englischen Forum gepostet:
http://purebasic.fr/english/viewtopic.p ... it=taskbar