Hättest Du ein einfaches Beispiel ohne Internetfunktionalität und mit ruckelfreier Schrift und Ansicht bei Größenänderung der Gui parat?
Klar! Ich habe mal die dafür notwendigen Sachen rauskopiert:
Spoiler anzeigen
AutoIt
#include <GDIPlus.au3>
#include <GDIPlusConstants.au3>
#include <GUIConstantsEx.au3>
#include <Math.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
; Ein Array mit den Scroll-Texten erstellen (kann beliebig erweitert werden, das Ende wird per UBound abgefragt)
Global $aNewsText[] = ['(1/2) Dieser Text hier wird über den Bildschirm gescrollt.', '(2/2) Und dieser Text folgt als Nächstes']
Global Const $iMainWidth = 800, $iMainHeight = 210 ; die Groesse des Fensters
Global Const $iMarqueeWidth = 4000 ; Die Breite, die hier angegeben wird, muss groesser als die Fensterbreite sein, weil der Scrolltext komplett hineinpassen muss
Global Const $iMarqueeHeight = 50 ; Die Hoehe der Laufschrift
Global Const $iMarqueeLeft = 40, $iMarqueeTop = 30 ; die Position, an der die Laufschrift auf dem Fenster angezeigt werden soll
_GDIPlus_Startup()
Global $hMarqueeGui = GUICreate('Laufschrift-Beispiel', $iMainWidth, $iMainHeight)
GUISetBkColor(0x000000) ; Hintergrundfarbe des Fensters (RGB)
GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseMarqueeGui')
Global $hDC_Marquee = _WinAPI_GetDC($hMarqueeGui)
Global $hDC_MarqueeBB = _WinAPI_CreateCompatibleDC($hDC_Marquee)
Global $hBMP_Marquee = _WinAPI_CreateCompatibleBitmap($hDC_Marquee, $iMarqueeWidth, $iMarqueeHeight)
Global $hBMP_Old = _WinAPI_SelectObject($hDC_MarqueeBB, $hBMP_Marquee)
Global $hGC_Marquee = _GDIPlus_GraphicsCreateFromHDC($hDC_MarqueeBB)
_GDIPlus_GraphicsClear($hGC_Marquee, 0xFFFFFFFF) ; Hintergrundfarbe der Laufschrift (ARGB)
_GDIPlus_GraphicsSetSmoothingMode($hGC_Marquee, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
_GDIPlus_GraphicsSetPixelOffsetMode($hGC_Marquee, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)
_GDIPlus_GraphicsSetTextRenderingHint($hGC_Marquee, 5)
GUISetState(@SW_SHOW, $hMarqueeGui)
_WinAPI_BitBlt($hDC_Marquee, $iMarqueeLeft, $iMarqueeTop, $iMainWidth - $iMarqueeLeft * 2, $iMarqueeHeight, $hDC_MarqueeBB, 0, 0, $SRCCOPY)
Global $iMarqueeX = $iMainWidth - $iMarqueeLeft, $iNewsCount = 0
Global $iTextWidth = _SetMarqueeText($aNewsText[$iNewsCount])
While Sleep(10)
_MarqueeScroll()
WEnd
Func _CloseMarqueeGui()
_WinAPI_SelectObject($hDC_MarqueeBB, $hBMP_Old)
_WinAPI_DeleteObject($hBMP_Marquee)
_WinAPI_DeleteDC($hDC_MarqueeBB)
_WinAPI_ReleaseDC($hMarqueeGui, $hDC_Marquee)
_GDIPlus_GraphicsDispose($hGC_Marquee)
_GDIPlus_Shutdown()
GUIDelete($hMarqueeGui)
Exit
EndFunc ;==>_CloseMarqueeGui
Func _MarqueeScroll()
_WinAPI_BitBlt($hDC_Marquee, ($iMarqueeX > $iMarqueeLeft ? $iMarqueeX : $iMarqueeLeft), $iMarqueeTop, $iMainWidth - $iMarqueeLeft - ($iMarqueeX > $iMarqueeLeft ? $iMarqueeX : $iMarqueeLeft), $iMarqueeHeight, $hDC_MarqueeBB, ($iMarqueeX > $iMarqueeLeft ? 0 : $iMarqueeLeft - $iMarqueeX), 0, $SRCCOPY)
$iMarqueeX -= 1
If $iMarqueeX < -$iTextWidth Then
$iMarqueeX = $iMainWidth
$iNewsCount += 1
If $iNewsCount = UBound($aNewsText) Then $iNewsCount = 0
$iTextWidth = _SetMarqueeText($aNewsText[$iNewsCount])
EndIf
EndFunc ;==>_MarqueeScroll
Func _SetMarqueeText($sText, $iTextColor = 0x000000, $iBkColor = 0xFFFFFF)
Local $hBrush = _GDIPlus_BrushCreateSolid(BitOR(0xFF000000, $iTextColor))
Local $hFormat = _GDIPlus_StringFormatCreate()
Local $hFamily = _GDIPlus_FontFamilyCreate('Times New Roman')
Local $hFont = _GDIPlus_FontCreate($hFamily, 24, 3)
Local $tLayout = _GDIPlus_RectFCreate(0, 6, $iMarqueeWidth, 40)
Local $aInfo = _GDIPlus_GraphicsMeasureString($hGC_Marquee, $sText, $hFont, $tLayout, $hFormat)
Local $iTextWidth = Ceiling(DllStructGetData($aInfo[0], 'Width'))
Local $hPen = _GDIPlus_PenCreate(0xFF000000, 8)
_GDIPlus_PenSetDashStyle($hPen, $GDIP_DASHSTYLEDASHDOT)
_GDIPlus_PenSetDashCap($hPen, $GDIP_DASHCAPTRIANGLE)
_GDIPlus_GraphicsClear($hGC_Marquee, BitOR(0xFF000000, $iBkColor))
_GDIPlus_GraphicsDrawLine($hGC_Marquee, 0, 0, $iTextWidth, 0, $hPen)
_GDIPlus_GraphicsDrawLine($hGC_Marquee, 0, $iMarqueeHeight - 0, $iTextWidth, $iMarqueeHeight - 0, $hPen)
_GDIPlus_GraphicsDrawStringEx($hGC_Marquee, $sText, $hFont, $aInfo[0], $hFormat, $hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
Return $iTextWidth
EndFunc ;==>_SetMarqueeText
Alles anzeigen