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?
Label $PBS_Marquee
-
- [ gelöst ]
-
Conan10 -
18. Januar 2010 um 18:23 -
Geschlossen -
Erledigt
-
-
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 -
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 .....MfG hellboy
-
Hallo hellboy3,
also dieses Skript läuft auch mit Obfuscator:
Spoiler anzeigen
[autoit]#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
[/autoit] [autoit][/autoit] [autoit]
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/striponly
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <StaticConstants.au3>AdlibRegister('_MoveMarquee', 100)
[/autoit] [autoit][/autoit] [autoit]
AdlibRegister('_Laufschrift', 100)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)
[/autoit] [autoit][/autoit] [autoit]
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')Func _MoveMarquee()
[/autoit] [autoit][/autoit] [autoit]
Local $aCpos = ControlGetPos($mygui, '', $myl)
If $aCpos[0] >= 200 Then $aCpos[0] = 0
ControlMove($mygui, '', $myl, $aCpos[0] + 10, $aCpos[1])
EndFuncFunc _Laufschrift()
[/autoit]
GUICtrlSetData($myl2,StringMid($sText,$iPos) & " " & $sText)
$iPos = $iPos +1
if $iPos > StringLen($sText) Then $iPos = 0
EndFuncmfg (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
-
- Offizieller Beitrag
Hier mal eine Laufschrift mit Hilfe von GDI+:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_Startup()$sString = 'Dieser Text scrollt als Laufschrift über das Fenster und wird immer wieder wiederholt.'
[/autoit] [autoit][/autoit] [autoit]
$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$hGui = GUICreate('GDI+ Laufschrift', $iWidth, $iHeight)
[/autoit] [autoit][/autoit] [autoit]
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)While Sleep(10)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _DrawMarquee()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
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 ;==>_DrawMarqueeFunc _End()
[/autoit]
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 -
So falls noch benötigt, meine UDF ist fertig.
Marquee für Labels -
hallo m-obi,
deine UDF veröffentlichst du am besten im Forum Skripte, da wird sie leichter gefunden,
mfg (Auto)Bert
-
Las ich machen, wobei die eigentlich bei Entwickler richtig ist, nämlich da kommen UDFs eigentlich hin.
-