Prospeed.dll Sprite erstellen

  • Hallo Community,

    ich beschäftige mich seit wenigen Tagen mit der Prospeed.dll und bin mir nicht sicher ob jemand Erfahrung mit der Dll gemacht hat, jedoch bekomme ich es nicht hin, ein Sprite zu erstelln ?( . Ich hoffe jemand kann helfen ...

    Hier mal mein bisheriger Code:

    Spoiler anzeigen
    [autoit]

    #include <Prospeed30.au3>
    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $GUI_MAIN = GUICreate("Test", 500, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetState()

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

    GetHDC()

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

    $sprite = LoadSprite("Sprites.gif")
    $sprite = Sprite($sprite, $hDC,0, 0, 24,18, 1, 4, 6, 24,180)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Exit()
    FreeImage($sprite)
    Exit
    EndFunc

    [/autoit]

    Es sind bereits Bespiele dabei, jedoch sind diese in XProfan( noch nie gehört 8| ) geschrieben.
    Ich hab ein Sprite verwendet, was bei diesen Beispielen auch genommen wurde.

    Dieses Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.


    Hier der Download zur ProSpeed.dll

    Mfg

  • Hallo,
    schau mal hier, http://www.autoitscript.com/forum/index.php?showtopic=58665&st=0
    dort gibts eine Demo, die alle Fragen beantworten dürfte
    Öffnen mit 7-zip

  • Ja, auch ich hab mich Tagelang mit dieser dll rumgeärgert. Nun dein Problem ist, das ein Background erstellt werden muss.
    Endweder so:

    [autoit]

    Background($S_FILE, $S_POSX, $S_POSY, $N_WIDTH, $N_HEIGHT)

    [/autoit]

    , oder du erstellst in so:

    [autoit]

    Func BackgroundScroll($S_FILE)
    $WIN_TILLE = WinGetTitle("", "")
    $ClientSize = WinGetClientSize($WIN_TILLE, "")
    $WIN_GETHANDLE = WinGetHandle($WIN_TILLE, "")
    $RAW_HDC = DllCall("user32.dll", "ptr", "GetDC", "hwnd", $WIN_GETHANDLE)
    $hDC = "0x" & Hex($RAW_HDC[0])

    dim $S_background[1]
    $S_background[0] = $S_FILE
    $S_WIDTH[0] = GetWidthImage($S_FILE)
    $S_HEIGHT[0] = GetHeightImage ($S_FILE)
    DllCall($S_DLL, "long", "PaintImage", _
    "long", $hDC, _
    "long", 0, _
    "long", 0, _
    "long", $S_WIDTH[0], _
    "long", $S_HEIGHT[0], _
    "long", $S_background[0], _
    "long", 0, _
    "long", 0, _
    "long", 0)
    $S_fensterkopie1 = DllCall($S_DLL, "long", "CreateImage", "long", $hDC, "long", $S_WIDTH[0], "long", $S_HEIGHT[0])
    $S_fensterkopie2 = DllCall($S_DLL, "long", "CreateImage", "long", $hDC, "long", $S_WIDTH[0], "long", $S_HEIGHT[0])
    DllCall($S_DLL, "long", "PaintImage", _
    "long", $S_fensterkopie1[0], _
    "long",0, _
    "long",0, _
    "long",$S_WIDTH[0], _
    "long",$S_HEIGHT[0], _
    "long",$S_background[0], _
    "long",0, _
    "long",0, _
    "long",0)
    DllCall($S_DLL, "long", "PaintImage", _
    "long", $S_fensterkopie2[0], _
    "long",0, _
    "long",0, _
    "long",$S_WIDTH[0], _
    "long",$S_HEIGHT[0], _
    "long",$S_background[0], _
    "long",0, _
    "long",0, _
    "long",0)
    DllCall($S_DLL, "long", "InitSpriteBackground", _
    "long",1, _
    "long",$ClientSize[0], _
    "long",$ClientSize[1], _
    "long",0, _
    "long",0, _
    "long",0, _
    "long",0)
    DllCall($S_DLL, "long", "InitSpriteBackground", _
    "long",888888, _
    "long",888888, _
    "long",888888, _
    "long",888888, _
    "long",888888, _
    "long",0, _
    "long",0)
    Return $S_background[0]
    EndFunc

    [/autoit]


    Diese 2 Version hab ich ein wenig abgeändert. Nun muss mand statt dem Dateipfad, eine Datei laden. Zum Scrollen verwendet man:

    Spoiler anzeigen
    [autoit]

    ;###################################################################################################################################
    ; updatescroll
    ; syntax : updatescroll()
    ; Note ; No parameters required
    ; For using BackgroundScroll()
    ; updatescroll() must be in a mainloop, it update's the screen for WM_PAINT
    ;###################################################################################################################################
    Func updatescroll()
    $S_fensterkopie1 = DllCall($S_DLL, "long", "CreateImage", _
    "long", $hDC, _
    "long", $S_WIDTH[0], _
    "long", $S_HEIGHT[0])
    EndFunc
    ;###################################################################################################################################
    ; Scroll_Left
    ; syntax : Scroll_Left(2)
    ; Note ; $S_Speed = how fast to scroll Positive number
    ; Scrolls the background to left
    ;###################################################################################################################################
    Func Scroll_Left($S_Speed)
    DllCall($S_DLL, "long", "InitSpriteBackground", _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", $S_Speed, _
    "long", 0)
    EndFunc
    ;###################################################################################################################################
    ; Scroll_Right
    ; syntax : Scroll_Right(-4)
    ; Note ; $S_Speed = how fast to scroll must be a Negative number
    ; Scrolls the background to Right
    ;###################################################################################################################################
    Func Scroll_Right($S_Speed)
    DllCall($S_DLL, "long", "InitSpriteBackground", _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", $S_Speed, _
    "long", 0)
    EndFunc
    ;###################################################################################################################################
    ; Scroll_Stop
    ; syntax : Scroll_Stop()
    ; Note ; No parameters required
    ; Stops scrolling
    ;###################################################################################################################################
    Func Scroll_Stop()
    DllCall($S_DLL, "long", "InitSpriteBackground", _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 0, _
    "long", 0)
    EndFunc
    ;###################################################################################################################################
    ; Scroll_Up
    ; syntax : Scroll_Up(-3)
    ; Note ; $S_Speed = how fast to scroll must be a Negative number
    ; Scrolls the background Up
    ;###################################################################################################################################
    Func Scroll_Up($S_Speed)
    DllCall($S_DLL, "long", "InitSpriteBackground", _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 0, _
    "long", $S_Speed)
    EndFunc
    ;###################################################################################################################################
    ; Scroll_Down
    ; syntax : Scroll_Down(3)
    ; Note ; $S_Speed = how fast to scroll must be a Positive number
    ; Scrolls the background Down
    ;###################################################################################################################################
    Func Scroll_Down($S_Speed)
    DllCall($S_DLL, "long", "InitSpriteBackground", _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 888888, _
    "long", 0, _
    "long", $S_Speed)
    EndFunc

    [/autoit]


    Um Positionen des Backgrounds auszulesen:

    Spoiler anzeigen
    [autoit]

    ;###################################################################################################################################
    ; GetBackgroundInfos
    ; syntax : $GetInfo = GetBackgroundInfos($S_value)
    ; Note ; No parameters required
    ; Strings return;
    ; 1) return if Background is scrolling return type (0 or 1)
    ; 2) returns window width
    ; 3) returns window height
    ; 4) returns X offset of background scroll
    ; 5) returns Y offset of background scroll
    ; 6) returns Speed of background scroll on X axis
    ; 7) returns Speed of background scroll on Y axis
    ; return = value of BackgroundInfos
    ;###################################################################################################################################
    Func GetBackgroundInfos($S_value)
    $B_BackgroundInfos = DllStructCreate("long;long;long;long;long;long;long")
    DllCall($S_DLL, "long", "GetBackgroundInfos", "long", DllStructGetPtr($B_BackgroundInfos))
    $S_Info = DllStructGetData($B_BackgroundInfos, $S_value)
    Return $S_Info
    EndFunc

    [/autoit]


    Ich hoffe es funktioniert. :)

  • Hallo Faweyr,
    erst einmal Danke für deine Mühen :thumbup:

    Doch wenn ich dein Skript starte hängt es sich auf und es kommt die Fehlermeldung, dass es geschlossen werden muss.
    Dieses Phänomen hab ich nun schon öfter erlebt seit ich Windows 7 habe.
    Kann es damit zusammen hängen oder ist alles nur Einbildung? ?(

    \\EDIT:
    Ich habe jede Funktion auskommentiert, so dass sie nicht ausgeführt wird, um zu prüfen, an welcher Funktion es scheitert. Doch jetzt funktioniert das gesamte Skript 8|?(
    Ist mir ein Rätsel, aber funktioniert.

    Einmal editiert, zuletzt von hulle (19. Dezember 2009 um 19:37)

  • Mhm, kann vielleicht schon sein, ich benutze XP, ich schreib mal schnell das Script vereinfacht. Vielleicht liegt es nur an einer Funktion... :S

  • So, nun die abgespeckte Version, wenn diese nicht funktioniert, dann weiß ich leider auch nicht.Wenn sie funktioniert, dann kannst du ja bei dem alten Script durch weglassen verschiedener Funktionen schauen, welche den Fehler verursacht :)

    Spoiler anzeigen
    [autoit]

    #include <Prospeed30.au3>
    #include <GUIConstantsEx.au3>
    #Include <Color.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $GUI_MAIN = GUICreate("Test", 500, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetState()

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

    GetHDC()

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

    $background_t = CreateImage(500, 400) ;Erstelle eine Bitmap (Schwarz)

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

    BackgroundScroll($background_t) ;Zeige Bitmap als Background

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

    $sprite = LoadFileImage("Sprites.gif") ;Lade Sprite-GIF
    $sprite = Sprite($sprite, $hDC,0, 0, 24,18, 4, 4, 6, 250,200) ;Fehler war: die Zahl "1", statt dessen 4, da 4 Sprites

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Exit()
    FreeImage($sprite)
    FreeImage($background_t)
    Exit
    EndFunc

    [/autoit]
  • So, nun die abgespeckte Version, wenn diese nicht funktioniert, dann weiß ich leider auch nicht.Wenn sie funktioniert, dann kannst du ja bei dem alten Script durch weglassen verschiedener Funktionen schauen, welche den Fehler verursacht :)


    Wie oben beschrieben hängt es sich nicht mehr auf und das verkürzte Skript funktioniert auch. :D Nochmals Danke :thumbup:

    \\EDIT: Heut hab ich dein Skript wieder getest und es hängt sich wieder auf :cursing: .
    Es liegt an der Funktion BackgroundScroll, warum das so ist versteh ich selbst nicht ?( . Vorallem läuft das Skript einmal und dann hängt es sich wieder auf :(
    Vielleicht hat jemand eine Erklärung dazu...

    Einmal editiert, zuletzt von hulle (20. Dezember 2009 um 16:21)