Bewegendes Label

  • Hallo allerseits, ich möchte gerne ein Label mit einem Text erstellen, welches von Links nach Rechts durch eine Gui "fährt" und wenn es das Ende der Gui erreicht hat, das er dann wieder von Links anfängt.
    Hier ist mein Testscript, welches schon fast so läuft wie ich es mir vorgestellt hatte

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Global $Pos[2]
    $Pos[0] = -80
    $Pos[1] = 40

    ; --> Gui
    GUICreate("This is a test GUI",500,100)
    $label=GUICtrlCreateLabel ( "www.autoit.de", $Pos[0], $Pos[1])
    GUISetState ()
    ; <--

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    GUICtrlSetPos ($label, $Pos[0]+3,$Pos[1])
    $Pos[0] = $Pos[0]+3
    If $Pos[0] >= 500 Then $Pos[0] = -80
    Sleep(30)
    WEnd

    [/autoit]

    Also zu meinem Problem. Kann man irgentwie erkennen, dass wenn der rechte Teil der Schrift die Gui Verlässt, dass er dann Links schon wieder anfängt ?
    Ich hoffe ich habe mich nicht zu undeutlich ausgedrückt ;) Wenn Frage unklar ist, bitte sagen dann versuche ich es anders zu formulieren.

    Edit: Natürlich kann man das If $Pos[0] >= 500 Then $Pos[0] = -80 ändern, das ist mir klar. Jedoch dachte ich mir, dass es vielleicht etwas schöneres gibt, das auch funktioniert bei längeren oder kürzeren Texten ohne jedesmal die Werte zu ändern.

    Einmal editiert, zuletzt von SiLenCa (13. April 2009 um 16:43)

  • mit if wenn die left kordinate so groß ist wie die breite der GUI dann ist die left kordinate 0

    Ich weis aber jetzt nicht wie es in Autoit genau heist aber vielleicht hilft es dir ja weiter

  • Wenn ich dich richtig verstanden habe, dann ist es genau das, was ich schon habe oder ? -.-

    Edit: Also ich möchte, sobald ein Buchstabe Rechts die Gui verlässt, das er Links schon wieder Rauskommen soll. Hoffe jetzt versteht ihr mich ;)

  • Ja ich hab das mal mit Label ohne Text gemacht allerdings bewegt es sich per Pfeiltasten und ich glaube du willst dass es sich von selbst bewegt

    Ich habe mal einen Teil von mir herausgenommen

    [autoit]

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

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

    HotKeySet("{Down}", "_down")
    HotKeySet("{Up}", "_up")
    HotKeySet("{Right}", "_right")
    HotKeySet("{Left}", "_left")

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

    Global $posx = 10, $posy = 10, $speed = 30

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

    Opt("GUIOnEventMode", 1)

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

    $Form1 = GUICreate("SB Game", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP)
    GUISetBkColor(0xCDAD00)

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

    $mainmenu = GUICtrlCreateMenu("Datei")
    $exititem = GUICtrlCreateMenuItem("Beenden", $mainmenu)
    GUICtrlSetOnEvent(-1,"_Exit")

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

    GUICTrlCreateLabel("",100,50,60,300)
    GUICTrlSEtBkColor(-1,0x000000)

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $exititem
    Exit
    EndSwitch
    WEnd

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

    Func _down()
    $posy += $speed
    If $posy >= @DesktopHeight Then $posy = 0
    ControlMove("", "", $label1, $posx, $posy)
    EndFunc ;==>_down

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

    Func _up()
    $posy -= $speed
    If $posy <= 0 Then $posy = @DesktopHeight
    ControlMove("", "", $label1, $posx, $posy)
    EndFunc ;==>_up

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

    Func _right()
    $posx += $speed
    If $posx >= @DesktopWidth Then $posx = 0
    ControlMove("", "", $label1, $posx, $posy)
    EndFunc ;==>_right

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

    Func _left()
    $posx -= $speed
    If $posx <= 0 Then $posx = @DesktopWidth
    ControlMove($Form1, "", $label1, $posx, $posy)
    EndFunc ;==>_left

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    hoffentlich hilft dir das

  • Mit einem einzigen Label wird das schlecht gehn. dazu müsstest du für jeden Buchstaben ein eigenes Label erstellen.

    Das is allerdings ne ganz schöne Arbeit.
    Damit das Script nich ganz so lag wird, würd ich das vllt als ne art udf machen.

    Dann könnte man das so machen:

    $Label1 = GUICtrlCreateLabel ("A", 10, 10, 10)
    $Label2 = GUICtrlCreateLabel ("b", 10, 10, 10)
    $Label3 = GUICtrlCreateLabel ("c", 10, 10, 10)

    u.s.w.

    Dann sagen, dass wen Label3 am ende der gui ist, dass es wieder zum anfang gehn soll.
    Wenn dann Label2 am ende ist, soll es wieder an den anfang u.s.w.

    Musst mal gucken, ob das umsetzbar ist.

  • Ich hab das ganze mal so gelöst =]

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Global $Pos1[2], $Pos2[2],$labelEscape = True, $x = True
    $Pos1[0] = -80
    $Pos1[1] = 40
    $Pos2[0] = -80
    $Pos2[1] = 40

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

    ; --> Gui
    GUICreate("This is a test GUI",500,100)
    $label1=GUICtrlCreateLabel ( "www.autoit.de", $Pos1[0], $Pos1[1],80)
    $label2=GUICtrlCreateLabel ( "www.autoit.de", $Pos2[0], $Pos2[1])
    GUISetState ()
    ; <--

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    If $x Then
    $Pos1[0] = $Pos1[0]+3
    GUICtrlSetPos ($label1, $Pos1[0]+3,$Pos1[1])
    EndIf
    If $Pos1[0] >= 420 Then
    $x = False
    GUICtrlSetPos ($label1, $Pos1[0]+3,$Pos1[1])
    $Pos1[0] = $Pos1[0]+3
    If $LabelEscape Then
    $Pos2[0] = -80
    $labelescape = Not $labelEscape
    EndIf
    GUICtrlSetPos ($label2, $Pos2[0]+3,$Pos2[1])
    $Pos2[0] = $Pos2[0]+3
    EndIf
    If $Pos2[0] >= 420 Then
    GUICtrlSetPos ($label2, $Pos2[0]+3,$Pos2[1])
    $Pos2[0] = $Pos2[0]+3
    If Not $LabelEscape Then
    $Pos1[0] = -80
    $labelescape = Not $labelEscape
    EndIf
    GUICtrlSetPos ($label1, $Pos1[0]+3,$Pos1[1])
    $Pos1[0] = $Pos1[0]+3
    Endif
    Sleep(30)
    WEnd

    [/autoit]
  • Cool danke funktioniert einwandfrei... habe es auch grade hinbekommen ;) zwar etwas anders aber scheint auch zu gehen.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Global $Pos[2]
    $Pos[0] = -80
    $Pos[1] = 40

    Global $pos1[2]
    $Pos1[0] = -80
    $Pos1[1] = 40

    ; --> Gui
    GUICreate("This is a test GUI",500,100)
    $label=GUICtrlCreateLabel ( "www.autoit.de", $Pos[0], $Pos[1],68)
    $test = GUICtrlCreateLabel("www.autoit.de", $Pos1[0], $Pos1[1],68)
    GUISetState ()
    ; <--

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    GUICtrlSetPos ($label, $Pos[0]+3,$Pos[1])
    $Pos[0] = $Pos[0]+3
    If $Pos[0] >= 500-75 Then
    GUICtrlSetState($test,$GUI_SHOW)
    If $pos[0] >= 500 Then
    $pos[0] = $pos1[0]
    GUICtrlSetState($test,$GUI_HIDE)
    $Pos1[0] = -80
    $Pos1[1] = 40
    GUICtrlSetPos($test,$Pos1[0],$Pos1[1])
    EndIf
    GUICtrlSetPos($label, $Pos[0],$Pos[1])
    GUICtrlSetPos($test,$Pos1[0],$Pos1[1])
    $Pos1[0] = $Pos1[0]+3
    EndIf
    Sleep(30)
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Texteffects Edit: Hier mit Download und Beispiel: TextEffects-UDF - Mach mehr aus langweiligem Text (inkl. About-Box)

    Weiß gerade nicht, ob es auch in 3.3.0.0 ohne Änderungen läuft, außer OrganizeIncludes vielleicht schon.

    peethebee

    p.s. Man beachte die PostID :D.

  • peethebee

    Habe die Scripte unter dem Link von Dir getestet. Arbeiten auch unter der aktuellen Version.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr