Scrollbanner mit Bild (Pixel-für-Pixel-Bewegung)

  • abend alle miteinander,
    ich habe das forum schon durchsucht aber nur eine methode gefunden, bei der der text buchstabe für buchstabe gescrollt wird.
    da ich aber darauf bestehe das es pixel für pixel verschoben wird, denke ich wird es nur mit einem bild klappen.
    ich fasse hier den code mal zusammen:

    [autoit]


    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>

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

    $mainGUI = GUICreate("blubb", 512, 300)
    $pic = GUICtrlCreatePic(@ScriptDir & "\test.bmp", 512, 100, 769, 30)

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $pic
    EndSelect
    _ScrollPic($gui, $pic)
    WEnd

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

    Func _ScrollPic($gui, $pic)
    Local $picpos = ControlGetPos($gui, "", $pic)
    Local $i = 0
    If $picpos[0] = -769 Then
    ControlMove($gui, "", $pic, 512, $picpos[1])
    EndIf
    ControlMove($gui, "", $pic, $picpos[0]-1, $picpos[1])
    EndFunc

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


    vielleicht seht ihr mehr als ich; vorschläge für einen verbesserten aufbau werden natürlich gerne entgegengenommen. :)

    grüße - narutokun08

    Einmal editiert, zuletzt von Narutokun08 (13. Februar 2009 um 19:51)

  • [autoit]

    $pic = GUICtrlCreatePic(@ScriptDir & "\test.bmp", 512, 100, 769, 30)

    [/autoit]

    Muss da net nochso ein \ hin? Versuchs mal ^^

  • achso nein es klappt schon bild wird ja angeziegt^^ es ist zusammengefasst ich habs ja neugeschriben (direkt hierein) und es dann vergessen aber ich werd noch hinzufügen danke für den hinweis^^

  • Du willst ein Bild in einer GUI bewegen?. Hab ich das so richtig verstanden?
    Dann versuchs mal mit:

    [autoit]

    GUICtrlSetGraphic

    [/autoit]
  • @MOZ: ja, richtig, genau so^^ nur kann man mit guictrlsetgraphic das bild ändern und nicht verschieben meines wissens.

    ich hab das problem mittlerweile teilweise gelößt...
    dualcore @ 3 ghz: 51% cpu auslastung... ich bin mir sicher dass da irgendwas nicht stimmt^^ btw ist die breite/höhe der bmp ~3000x25pixel. aber es kann doch nicht sein dass das einfache verschieben eines bilds derartig viel ressourcen frisst. der code im moment:

    [autoit]


    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>

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

    $gui = GUICreate("blubb", 512, 512)
    $pic = GUICtrlCreatePic(@ScriptDir & "\test.bmp", 512, 50, 3000, 25)

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

    GUISetState($gui, @SW_SHOW)

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

    $msg = GUIGetMsg()
    While 1
    Switch
    Case $GUI_EVENT_CLOSE
    Exit
    EndSelect
    _ScrollPic($gui, $pic)
    WEnd

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

    Func _ScrollPic($gui, $pic)
    Local $picpos = ControlGetPos($gui, "", $pic)
    Local $i = 0
    While $i <= $picpos[2]; "Jene While"
    ControlMove($gui, "", $pic, $picpos[0]-1, $picpos[1])
    $i = $i + 1
    WEnd
    If $picpos[0] = -3000 Then; "Diese If"
    ControlMove($gui, "", $pic, $picpos[0]+3000+512, $picpos[1])
    EndIf
    EndFunc

    [/autoit]


    note: 1. ja man könnte 3000 auch mit einer variablen ausstatten. jedoch bin ich dafür gerade zu müde....
    2. es funktioniert, seitdem "Diese If" abfrage hinter "Jene(r) While" steht.
    3. das script wurde so wie es hier steht, da es ja eine zusammenfassung ist, nicht getestet.
    4. auf die frage "kannst du nicht den kompletten code schicken?" antworte ich gleich mit nein, der rest würde 1. nichts dazu beitragen und 2. verlier ich manchmal selbst den überblick -.-

    naja ich wünsche mal eine gn8 :)

    grüße - narutokun08

  • du musst in die While Wend schleife UNBEDINGT ein sleep reinbauen, so zwischen 10 und 50!!!!
    sonst kackt dir der pc iwann ab :D

    Padmak

  • Ich habe auch mal gemacht, wenn ich richtig verstaden habe was er meint sollte es eig alles klären!

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 288, 299, 233, 147)
    $Button1 = GUICtrlCreateButton("^", 248, 247, 19, 25, 0)
    $Button2 = GUICtrlCreateButton("v", 248, 271, 19, 25, 0)
    $Button3 = GUICtrlCreateButton("<", 230, 271, 19, 25, 0)
    $Button4 = GUICtrlCreateButton(">", 266, 271, 19, 25, 0)
    $Pic1 = GUICtrlCreatePic(@WindowsDir & "\Angler.bmp", 80, 88, 108, 108, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Move("UP")
    Case $Button2
    _Move("Down")
    Case $Button3
    _Move("Left")
    Case $Button4
    _Move("Right")
    EndSwitch
    Sleep (50)
    WEnd
    Func _Move($State)
    Local $Pos = ControlGetPos($Form1, "", $Pic1)
    If $State = "UP" Then
    ControlMove($Form1, "", $Pic1, $Pos[0], $Pos[1]-1)
    ElseIf $State = "Down" Then
    ControlMove($Form1, "", $Pic1, $Pos[0], $Pos[1]+1)
    ElseIf $State = "Left" Then
    ControlMove($Form1, "", $Pic1, $Pos[0]-1, $Pos[1])
    ElseIf $State = "Right" Then
    ControlMove($Form1, "", $Pic1, $Pos[0]+1, $Pos[1])
    EndIf
    EndFunc ;==>_Move

    [/autoit]

    mfg. Jam00

  • naja fast :/ nur das ich bei dem code von dir immer klicken muss ich wollte es ja dass es automatisch geht. hier hab ich mal was gemacht wie es sein sollte.
    natürlich gehts hier nur um das bild ganz oben :) ich mach auch gleich noch ein sleep rein dass sich auch kein rechner aufhängt. problem is halt dann dass die button so träge sind...

    [autoit]


    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>

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

    $gui = GUICreate("blubb", 512, 300)
    GUISetBkColor(0x010101)

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

    $pic = GUICtrlCreatePic(@WindowsDir & "\Angler.bmp", 512, 5, 3000, 25)
    $pic2 = GUICtrlCreatePic(@WindowsDir & "\Kaffeetasse.bmp", 192, 100, 128, 128)
    $next_button = GUICtrlCreateButton("Nächstes", 344, 152, 96, 24)
    $picsel = 0

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

    GUISetState(@SW_SHOW, $gui)

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

    #cs
    0 = Kaffeetasse.bmp
    1 = Granit.bmp
    2 = Feder.bmp
    3 = Fächer.bmp
    4 = Angler.bmp
    #ce

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $pic
    Case $GUI_EVENT_CLOSE
    Exit
    Case $next_button
    If $picsel = 0 Then
    GUICtrlSetImage($pic2, @WindowsDir & "\Granit.bmp")
    $picsel2 = 1
    EndIf
    If $picsel = 1 Then
    GUICtrlSetImage($pic2, @WindowsDir & "\Feder.bmp")
    $picsel2 = 2
    EndIf
    If $picsel = 2 Then
    GUICtrlSetImage($pic2, @WindowsDir & "\Fächer.bmp")
    $picsel2 = 3
    EndIf
    If $picsel = 3 Then
    GUICtrlSetImage($pic2, @WindowsDir & "\Angler.bmp")
    $picsel2 = 4
    EndIf
    If $picsel = 4 Then
    GUICtrlSetImage($pic2, @WindowsDir & "\Kaffeetasse.bmp")
    $picsel2 = 5
    EndIf
    If $picsel2 = 1 Then
    $picsel = 1
    $picsel2 = 0
    EndIf
    If $picsel2 = 2 Then
    $picsel = 2
    $picsel2 = 0
    EndIf
    If $picsel2 = 3 Then
    $picsel = 3
    $picsel2 = 0
    EndIf
    If $picsel2 = 4 Then
    $picsel = 4
    $picsel2 = 0
    EndIf
    If $picsel2 = 5 Then
    $picsel = 0
    $picsel2 = 0
    EndIf

    EndSwitch
    _ScrollPic($gui, $pic)
    Sleep(50)
    WEnd

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

    Func _ScrollPic($gui, $pic)
    Local $picpos = ControlGetPos($gui, "", $pic)
    Local $i = 0
    While $i <= $picpos[2]
    ControlMove($gui, "", $pic, $picpos[0]-1, $picpos[1])
    $i = $i + 1
    WEnd
    If $picpos[0] = -3000 Then
    ControlMove($gui, "", $pic, $picpos[0]+3000+512, $picpos[1])
    EndIf
    EndFunc

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


    note: code als funktionierend getestet.

    aber irgendwie hab ich das gefühl da hängt alles... naja mal sehen vielleicht weiß doch jemand noch weiter

    mfg - narutokun08

    Einmal editiert, zuletzt von Narutokun08 (14. Februar 2009 um 08:05)