Label $PBS_Marquee

  • Hi,

    ein Freund von mir hat sich gefragt, ob es möglich wäre, den $PBS_Marquee-Style der Progressbar für Label mit zu langen Text nutzen kann. Halt, dass es irgendeine Style gibt, der das ermöglicht.
    Leider kam ich auch auf keine entsprechende Lösung.
    Vielleicht hat sich damit schon einer befasst oder weiß vielleicht wie es geht.

    Schonmal Danke für die Antworten ;)

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

    Einmal editiert, zuletzt von Conan10 (18. Januar 2010 um 21:17)

  • Hallo Conan10,

    Zitat

    ein Freund von mir hat sich gefragt, ob es möglich wäre, den $PBS_Marquee-Style der Progressbar für Label mit zu langen Text nutzen kann. Halt, dass es irgendeine Style gibt, der das ermöglicht.


    Dann frage ihn bitte wie soetwas aussehen soll (übersteigt meine Vostellungskraft)
    Danach kannst du es ja uns erklären,

    mfg (Auto)Bert

  • @ Autobert
    Das heißt der Text soll im Prinzip durchlaufen. Das heißt so wie bei einem LCD-Werbedisplay z.b. InBanken,Apotheken,...
    @ m-obi
    ja nur ist das eigentlich ist der Platz sehr begrenzt. Aber notfalls geht das ja.


    Danke auf jeden fall euch beiden.

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • Hallo Conan10,

    nein für Laufschrift gibt es keinen Style, du kannst dies aber über eine Func (zusammen mit AdLib und GuiCtrlSetData) realisieren,

    mfg (Auto)Bert

  • Ich glaube er meinte der Text soll innerhalb das Labels laufen. Mal sehen was man da machen kann, vielleicht bekomm ich was dahin.

  • Hallo Conan10,

    hier mal ein kleines Skript mit 2 verschiedenen Ansätzen, der 1. ist aus dem Link den @Leon gepostet hat und ist im 1. Label , der zweite von mir im 2. Label zu sehen,

    Spoiler anzeigen
    [autoit]

    AdlibRegister('_MoveMarquee', 100)
    AdlibRegister('_Laufschrift', 100)

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

    Global $iPos = 0, $sText = 'Das ist der Text, der immer wieder durchläuft! Viel Spass damit!'

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

    Global $mygui = GUICreate('my gui', 200, 100)
    Global $myl = GUICtrlCreateLabel($sText, 0, 10, 150, 30)
    Global $myl2 = GUICtrlCreateLabel($sText, 10, 50, 180, 15)
    GUISetState()
    While GUIGetMsg() <> -3
    WEnd
    AdlibUnRegister('_MoveMarquee')
    AdlibRegister('_Laufschrift')

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

    Func _MoveMarquee()
    Local $aCpos = ControlGetPos($mygui, '', $myl)
    If $aCpos[0] >= 200 Then $aCpos[0] = 0
    ControlMove($mygui, '', $myl, $aCpos[0] + 10, $aCpos[1])
    EndFunc

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

    Func _Laufschrift()
    GUICtrlSetData($myl2,StringMid($sText,$iPos) & " " & $sText)
    $iPos = $iPos +1
    if $iPos > StringLen($sText) Then $iPos = 0
    EndFunc

    [/autoit]

    mfg (Auto)Bert

  • Hi,
    Also erstmal danke nochmal an alle die mir helfen.

    @Leon ja fast soetwas, was ich suche. Nur halt auf ein label begrenzt und das der text länger als das label ist und daher nur teile angezeigt werden.

    @m-obi Wäre toll wenn du sowas hinkriegst :rolleyes:

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • Genau das zweite Beispiel meine ich.
    Super großes Danke an dich Autobert.
    Aber auch danke an alle, die sich mit der Frage befasst haben.

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • So hab da dann auch was gemacht

    Hier kannst du mit den Buttons manuell die Position verstellen die er anzeigen soll:

    Spoiler anzeigen
    [autoit]

    #Include <String.au3>
    #include <GUIConstantsEx.au3>

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

    AdlibRegister('_Laufschrift', 50)

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

    Global $iPos = 1, $sText = 'Das ist der Text!'

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

    Global $mygui = GUICreate('my gui', 200, 100)
    Global $myl = GUICtrlCreateLabel("", 10, 10, 30, 15)
    Global $myl2 = GUICtrlCreateLabel("", 10, 50, 180, 15)
    $Zurueck = GUICtrlCreateButton("<", 50, 10, 30, 25)
    $Weiter = GUICtrlCreateButton(">", 85, 10, 30, 25)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $Zurueck
    $iPos -= 1
    Case $Weiter
    $iPos += 1
    EndSwitch
    WEnd

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

    AdlibUnRegister('_Laufschrift')

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

    Func _Laufschrift()
    $iLeerzeichen = 5
    $iLaenge = 30
    $sNewText = $sText & _StringRepeat(" ", $iLeerzeichen) & $sText & _StringRepeat(" ", $iLeerzeichen) & $sText
    ;GUICtrlSetData($myl,$iPos)
    GUICtrlSetData($myl2,StringMid($sNewText, $iPos, $iLaenge))
    ;$iPos += 1
    If $iPos = (StringLen($sText) + $iLeerzeichen + 1) Then $iPos = 1
    EndFunc

    [/autoit]

    Und hier automatisch als Laufschrift:

    Spoiler anzeigen
    [autoit]

    #Include <String.au3>
    #include <GUIConstantsEx.au3>

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

    AdlibRegister('_Laufschrift', 50)

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

    Global $iPos = 1, $sText = 'Das ist der Text!'

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

    Global $mygui = GUICreate('my gui', 200, 100)
    Global $myl = GUICtrlCreateLabel("", 10, 10, 30, 15)
    Global $myl2 = GUICtrlCreateLabel("", 10, 50, 180, 15)
    $Zurueck = GUICtrlCreateButton("<", 50, 10, 30, 25)
    $Weiter = GUICtrlCreateButton(">", 85, 10, 30, 25)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $Zurueck
    ;$iPos -= 1
    Case $Weiter
    ;$iPos += 1
    EndSwitch
    WEnd

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

    AdlibUnRegister('_Laufschrift')

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

    Func _Laufschrift()
    $iLeerzeichen = 5
    $iLaenge = 30
    $sNewText = $sText & _StringRepeat(" ", $iLeerzeichen) & $sText & _StringRepeat(" ", $iLeerzeichen) & $sText
    ;GUICtrlSetData($myl,$iPos)
    GUICtrlSetData($myl2,StringMid($sNewText, $iPos, $iLaenge))
    $iPos += 1
    If $iPos = (StringLen($sText) + $iLeerzeichen + 1) Then $iPos = 1
    EndFunc

    [/autoit]

    Ich werd mal schauen ob ich daraus nicht eine UDF machen kann. Ich zebreche meinen Kopf im Moment noch über das AdlibRegister wie ich das wegbekomme, ohne die Funktion mit in die While-Schleife zu packen.

  • Danke euch beiden für die Idee und für das Skript.

    @ m-obi
    Deine ist ja fast so wie Autobert's. Nur etwas individueller.
    Klappen tut beides.
    Was wird das denn dann für eine UDF?

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • Bei mir ist nur der Unterschied das am Ende des Labels jeder Buchstabe und Leerzeichen auftaucht. Bei Autobert nur Wörterweise. Bei der UDF akknst du danzu mehreren labels das Marquee hinzufügen.

  • Du kannst es noch verfeinern, indem du die Länge durch StringLen ermittelst und das mal 2 nimmst. Funktioniert Super.
    Freue mich auf die UDF.

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • Ja ne die Länge soll man selber festlege, kann ja sein das der Text länger ist als das Label.

  • Kannst ja als Maximum dann den Wert das Labels nehmen. Weil man wird es nie schaffen, alles genauso einzustellen, wie es dadurch geschieht.

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei