GUICtrlStatusBar animiert

  • Hallo Zusammen,

    kann man ...

    _GUICtrlStatusBar_SetIcon($StatusBar, 0, _WinAPI_LoadShell32Icon(238))

    ... das Icon auch animiert darstellen? Also dass es sich dreht? Das ist das Icon, welches so eine Synchronisation darstellt.

    Lieben Gruß, Anna

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

    5 Mal editiert, zuletzt von AnnaM (24. Februar 2013 um 17:48)

  • Ob man ein Icon auch animiert darstellen kann, davon hab ich noch nix gelesen.
    Ich hab da mal was gezaubert, vielleicht kannst du damit was anfangen.

    Spoiler anzeigen
    [autoit]

    #include <APIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiStatusBar.au3>
    Global $ResFile = @ScriptDir & "\resourcen.dll", $iCount = 0
    Global $bState = False
    Global $hImage = _GUIImageList_Create(16, 16, 5)
    _GUIImageList_AddIcon($hImage, $ResFile, 0)
    _GUIImageList_AddIcon($hImage, $ResFile, 1)
    _GUIImageList_AddIcon($hImage, $ResFile, 2)
    _GUIImageList_AddIcon($hImage, $ResFile, 3)
    _GUIImageList_AddIcon($hImage, $ResFile, 4)
    _GUIImageList_AddIcon($hImage, $ResFile, 5)
    _GUIImageList_AddIcon($hImage, $ResFile, 6)
    _GUIImageList_AddIcon($hImage, $ResFile, 7)
    _GUIImageList_AddIcon($hImage, $ResFile, 8)
    _GUIImageList_AddIcon($hImage, $ResFile, 9)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hStatus
    Global $aParts[4] = [75, 150, 300, 400]
    Global $hGUI = GUICreate("ImageList Get Icon", 400, 300)
    Global $hButton = GUICtrlCreateButton("Start Animation", 10, 10, 120, 17)
    Global $hStatus = _GUICtrlStatusBar_Create($hGUI)
    _GUICtrlStatusBar_SetParts($hStatus, $aParts)
    _GUICtrlStatusBar_SetText($hStatus, "Part 1")
    _GUICtrlStatusBar_SetText($hStatus, "Part 2", 1)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $hButton
    $bState = Not $bState
    If $bState Then
    GUICtrlSetData($hButton, "Stop Animation ")
    AdlibRegister("UpdateIcon", 75)
    Else
    GUICtrlSetData($hButton, "Start Animation ")
    AdlibUnRegister("UpdateIcon")
    EndIf
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func UpdateIcon()
    $iCount += 1
    If $iCount > 9 Then $iCount = 0
    _GUICtrlStatusBar_SetIcon($hStatus, 3, _GUIImageList_GetIcon($hImage, $iCount))
    EndFunc ;==>UpdateIcon

    [/autoit]


    Für die Animation des Icons, musst du die Angehängte DLL-Datei in das Scriptverzeichnis kopieren.

    Ps: Kann die DLL Datei nicht direkt hochladen, deshalb die Zip Datei.

    lg Martina

  • hmm.. Ja, das sieht ganz gut aus. Aber dann muss ich mal schauen, wie ich mein Icon in die dll bekomme.
    Und wie bekomme ich es flüssiger von der Animation hin?
    Animierte Gifs kann ich nicht einblenden, oder?

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

    • Offizieller Beitrag

    Du kannst 1.st keine Gifs in eine Dll Einbinden.


    Sagt wer? Schau mal in meine Signatur ;)

    AnnaM, wie schnell soll sich den deiner Meinung nach das Icon drehen?
    Icon auf Speed :D

    Spoiler anzeigen
    [autoit]

    #Region - Timestamp
    ; 2012-12-14 20:34:16
    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    #include <APIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiStatusBar.au3>
    #include <Timers.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $ResFile = @ScriptDir & "\resourcen.dll", $iCount = 0
    Global $bState = False
    Global $hImage = _GUIImageList_Create(16, 16, 5)
    _GUIImageList_AddIcon($hImage, $ResFile, 0)
    ;_GUIImageList_AddIcon($hImage, $ResFile, 1)
    _GUIImageList_AddIcon($hImage, $ResFile, 2)
    ;_GUIImageList_AddIcon($hImage, $ResFile, 3)
    _GUIImageList_AddIcon($hImage, $ResFile, 4)
    ;_GUIImageList_AddIcon($hImage, $ResFile, 5)
    _GUIImageList_AddIcon($hImage, $ResFile, 6)
    ;_GUIImageList_AddIcon($hImage, $ResFile, 7)
    _GUIImageList_AddIcon($hImage, $ResFile, 8)
    ;_GUIImageList_AddIcon($hImage, $ResFile, 9)
    Global $Timer
    Global $hStatus
    Global $aParts[4] = [75, 150, 300, 400]
    Global $hGUI = GUICreate("ImageList Get Icon", 400, 300)
    Global $hButton = GUICtrlCreateButton("Start Animation", 10, 10, 120, 17)
    Global $hStatus = _GUICtrlStatusBar_Create($hGUI)
    _GUICtrlStatusBar_SetParts($hStatus, $aParts)
    _GUICtrlStatusBar_SetText($hStatus, "Part 1")
    _GUICtrlStatusBar_SetText($hStatus, "Part 2", 1)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $hButton
    $bState = Not $bState
    If $bState Then
    GUICtrlSetData($hButton, "Stop Animation ")
    $Timer= _Timer_SetTimer($hGUI,25, "UpdateIcon")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Else
    GUICtrlSetData($hButton, "Start Animation ")
    _Timer_KillTimer($hGUI,$Timer)

    [/autoit] [autoit][/autoit] [autoit]

    EndIf
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func UpdateIcon($hWnd, $Msg, $iIDTimer, $dwTime)
    #forceref $hWnd, $Msg, $iIDTimer, $dwTime

    $iCount += 1
    If $iCount > 4 Then $iCount = 0
    _GUICtrlStatusBar_SetIcon($hStatus, 3, _GUIImageList_GetIcon($hImage, $iCount))
    EndFunc ;==>UpdateIcon

    [/autoit]

    Wenn du deinen Icon in Thread postest, dann kann ich oder Martina es dir auch in eine Dll packen.
    Das Icon 238 aus der Shell32.dll ist kein Animiertes Icon, btw.

  • Hahaha :)
    Das Icon ist cool. Ja, so schnell wollte ich es dann doch nicht.
    Ich habe gerade ein typisches Ladesymbol als animiertes gif und versuche das gerade mit Hilfe deines Beitrags in die Statusleiste zu bekommen.
    Es will sich nicht bewegen :) Im ResourceHacker bewegt es sich noch *gg*

    http://de.wikipedia.org/wiki/Datei:Ladesymbol.gif

    Ich würde das Symbol nutzen unter Nennung der CC-Lizenz.

    BTW: Ich habe gerade im englischen Forum dieses hier gesehen: http://www.autoitscript.com/forum/topic/10…di/#entry716691
    Vielleicht bekomme ich es so hin :) Edit: Nach langem hin und her bekomme ich das animierte gif nur in der GUI dargestellt und nicht wie gewollt in die Statusleiste.

    Sollte man hier vlt das GIF in ein AVI umwandeln? Ich habe gesehen, dass es auch so gehen könnte. ?(

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

    3 Mal editiert, zuletzt von AnnaM (15. Dezember 2012 um 11:12)

    • Offizieller Beitrag

    Wieso machst du dir eigentlich selbst soviel Steß?
    Benutze doch einfach ein oder mehrere Labels als Statuszeile.
    Damit kannst du alles darstellen, nach was dir gerade der Sinn steht.

  • Naja, ich habe eine Statusbar integriert und möchte doch nur das animierte Gif (s.o.) einblenden und nicht alles umbasteln. :(
    Schade, dass sowas nicht geht. Ich wäre auch mit der Lösung von Geisterhexe zufrieden. Wandel ich aber das gif mit IrfanView in Einzelbilder um und speichere diese als ICO, damit ich diese wiederum in eine DLL speichern kann, werden die einzelnen ICOs voll hässlich von der Grafik her. Keine Ahnung warum.
    Darum habe ich nach einer anderen Lösung gesucht.

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Kann ich denn wenigstens im Label eine gif anzeigen lassen?

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Um Standardcontros in der Statusbar anzuzeigen kannst du _GUICtrlStatusBar_EmbedControl verwenden. Hier einmal ein Beispiel mit einem Avi-Control:

    Spoiler anzeigen
    [autoit]

    ; *** Start added by AutoIt3Wrapper ***
    #include <WindowsConstants.au3>
    ; *** End added by AutoIt3Wrapper ***
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GuiConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <SendMessage.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    $Debug_SB = False ; Check ClassName being passed to functions, set to True and use a handle to another control to see it work

    [/autoit] [autoit][/autoit] [autoit]

    _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Local $hGUI, $hani, $hInput, $input, $ani, $hStatus
    Local $aParts[4] = [80, 160, 300, -1]

    [/autoit] [autoit][/autoit] [autoit]

    ; Create GUI
    $hGUI = GUICreate("StatusBar Embed Control", 400, 300)

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; defaults to 1 part, no text
    $hStatus = _GUICtrlStatusBar_Create($hGUI)
    _GUICtrlStatusBar_SetMinHeight($hStatus, 40)

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Initialize parts
    _GUICtrlStatusBar_SetParts($hStatus, $aParts)
    _GUICtrlStatusBar_SetText($hStatus, "Part 1")
    _GUICtrlStatusBar_SetText($hStatus, "Part 2", 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Embed a avi
    $ani = GUICtrlCreateAvi("ykohl.avi", -1, 0, 0, 16, 16)
    $hani = GUICtrlGetHandle($ani)
    _GUICtrlStatusBar_EmbedControl($hStatus, 2, $hani)
    GUICtrlSetState($ani, 1)

    [/autoit] [autoit][/autoit] [autoit]

    $input = GUICtrlCreateInput("This is Embeded", 0, 0, 100)
    $hInput = GUICtrlGetHandle($input)
    _GUICtrlStatusBar_EmbedControl($hStatus, 3, $hInput, 3)

    [/autoit] [autoit][/autoit] [autoit]

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

    [/autoit]

    Dafür wird autoit.de/wcf/attachment/17692/ benötigt. Obwohl die Datei auf GIF endet ist es doch eine AVI. AVI's lassen sich hier aber nicht hochladen.

    mfg autoBert

  • Hallo autoBert,

    leider zeigt dein Script nichts an der Stelle des AVIs an. Ich habe es auch als .avi gespeichert.
    Ich habe ein Win7 64bit.

    EDIT:

    Eine NULL macht es sichtbar :)

    [autoit]

    $ani = GUICtrlCreateAvi("ykohl.avi", 0, 0, 0, 16, 16)

    [/autoit]

    Danke, das wars. Klasse! :thumbup:
    Echt supi. Danke

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

    Einmal editiert, zuletzt von AnnaM (18. Dezember 2012 um 21:28)

  • Eine Frage habe ich aber noch: Wie bekommst du aus einem GIF ein AVI? Ich hab schon viele Converter probiert und immer sagt er mir, ich habe eine falsche Bilddatei oder so etwas ?? :(

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Das ist keine zu GIF umgewandelte AVI-Datei.
    autoBert hat lediglich die Datei umbenannt, da sich AVI-Dateien hier im Forum nicht hochladen lassen (Das Forum unterscheidet nach Dateiendung, AutoIt nach Inhalt).

    Du könntest die Datei auch ykohl.txt nennen, und es würde funktionieren. Dateiendungen dienen nur dazu, die Dateien mit einem Standardprogramm zu verknüpfen.

    lg chess

    • Offizieller Beitrag

    Das ist keine zu GIF umgewandelte AVI-Datei.
    autoBert hat lediglich die Datei umbenannt, da sich AVI-Dateien hier im Forum nicht hochladen lassen (Das Forum unterscheidet nach Dateiendung, AutoIt nach Inhalt).

    Du könntest die Datei auch ykohl.txt nennen, und es würde funktionieren. Dateiendungen dienen nur dazu, die Dateien mit einem Standardprogramm zu verknüpfen.

    lg chess


    chessi, es geht nicht um die Datei, welche autoBert gepostet hat.
    Anna will eine animated Gif in eine Avi umwandeln. Siehe Post 6 http://de.wikipedia.org/wiki/Datei:Ladesymbol.gif

  • Ja genau :)

    Und vor allem muss der Hintergrund dann transparent sein, so wie es auch beim Kohl der Fall ist :)
    Für jeden Tipp wäre ich dankbar.

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Also nun habe ich schon 5 Konverer hinter mir. Alle machen das ganz brav, aber dann kommt die Fehlermeldung, dass es ein ungültiges Bild sei. "...ist entweder nicht für die Ausführung unter Windows vorgesehen oder enthält einen Fehler...". Was nun?

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Hm. Eventuell kannst du ja per FFMPEG.exe selber was basteln?

    Syntax zum Umwandeln:

    Code
    ffmpeg.exe -i animation.gif -s 420x300 animation.avi

    lg chess

    Edit:
    Das 420x300 musst du natürlich durch die gewünschte Auflösung ersetzen.^^

  • Also ich habs so gemacht. Kommt die gleiche Fehlermeldung. Gerne kannst du es probieren, das Bild habe ich ja oben schon gepostet :(
    Ich habe keine Ahnung mehr, wieso es nicht geht. .. son mist. So lange bin ich schon dran.

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Hat Raupi noch eine Idee?

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko: