Label $PBS_Marquee

  • Das ist mir ja auch schon in den Sinn gekommen, nur wie kann ich mit Hilfe der Breite des Labels herausfinden wieviel zeichen dort rein passen. Oder wie kann ich die Breite in Pixel von einer Zeichenkette herausfinden?

  • Also fürs Länge des Textes berechnen, hat meine ich Bugfix mal eine Funktion geschrieben.
    Länge des Labels könntest du mit ControlGetPos() ermitteln

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • Hi Leute ,

    wenn ich die lauftext-funktion im script einbaue und als au3 starte funzt es einwandfrei, aber sobald ich beim compilen den obfuscator benutze läuft der text nicht mehr,
    guckt euch des bitte mal an ..... :huh:

    MfG hellboy

    MfG hellboy

    [autoit]

    Do
    _help($user)
    Until $questions = 0

    [/autoit]

    Meine Werke:
    Ste`s Web-Radio

  • Hallo hellboy3,

    also dieses Skript läuft auch mit Obfuscator:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/striponly
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <StaticConstants.au3>

    [/autoit] [autoit][/autoit] [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,$SS_LEFTNOWORDWRAP)
    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

  • Hab`s jetzt , es lag nicht an der Funktion sondern daran das ich noch den alten obfuscator hatte , in dem war nämlich noch nicht der Fix für "AdlibUnRegister()" ;)

    Danke trotzdem :)


    MfG hellboy3

    MfG hellboy

    [autoit]

    Do
    _help($user)
    Until $questions = 0

    [/autoit]

    Meine Werke:
    Ste`s Web-Radio

    • Offizieller Beitrag

    Hier mal eine Laufschrift mit Hilfe von GDI+:

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>

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

    Opt('GUIOnEventMode', 1)
    _GDIPlus_Startup()

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

    $sString = 'Dieser Text scrollt als Laufschrift über das Fenster und wird immer wieder wiederholt.'
    $iWidth = 800 ; Fensterbreite
    $iHeight = 600 ; Fensterhöhe
    $iColor = 0xFF4444DD ; Vordergrundfarbe im Format: ARGB
    $iBkColor = 0xFFFFFFFF ; Hintergrundfarbe im Format: ARGB
    $iTextYPos = 320 ; Y-Position der Laufschrift
    $iTextXPos = $iWidth + 1 ; X-Position wird erstmal festgelegt auf außerhalb des Fensters
    $sFont = 'Times New Roman' ; Font der Laufschrift
    $iSize = 20 ; Fontgröße der Laufschrift

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

    $hGui = GUICreate('GDI+ Laufschrift', $iWidth, $iHeight)
    GUISetBkColor($iBkColor)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    GUISetState()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)
    $hBackBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    $hBrush1 = _GDIPlus_BrushCreateSolid($iColor)
    $hBrush2 = _GDIPlus_BrushCreateSolid($iBkColor)
    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    $hFont = _GDIPlus_FontCreate($hFamily, $iSize, 1, 3)
    _GDIPlus_GraphicsClear($hBackBuffer, $iBkColor)
    $tLayout = _GDIPlus_RectFCreate($iTextXPos, $iTextYPos, $iWidth, $iHeight)
    $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat)
    $iStringWidth = Int($iWidth / $aInfo[1]) * ($aInfo[1] * $aInfo[2])
    AdlibRegister('_DrawMarquee', 10)

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

    While Sleep(10)
    WEnd

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

    Func _DrawMarquee()
    Local $tLayout, $aInfo
    _GDIPlus_GraphicsFillRect($hBackBuffer, 0, $iTextYPos, $iWidth, $iSize * 2, $hBrush2)
    $tLayout = _GDIPlus_RectFCreate($iTextXPos, $iTextYPos, $iStringWidth, $iHeight)
    $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat)
    _GDIPlus_GraphicsDrawStringEx($hBackBuffer, $sString, $hFont, $aInfo[0], $hFormat, $hBrush1)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight)
    $iTextXPos -= 1
    If $iTextXPos = -$iStringWidth Then $iTextXPos = $iWidth
    EndFunc ;==>_DrawMarquee

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

    Func _End()
    AdlibUnRegister('_DrawMarquee')
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BrushDispose($hBrush1)
    _GDIPlus_BrushDispose($hBrush2)
    _GDIPlus_GraphicsDispose($hBackBuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_End

    [/autoit]
  • Las ich machen, wobei die eigentlich bei Entwickler richtig ist, nämlich da kommen UDFs eigentlich hin.