Bei mir war es damals einfach eine große Laufschrift mit Uhrzeit, was beim Wechsel der Sekunden extrem ruckelte.
Hier die Lösung, die ich für mich gefunden habe, an das Laufband ein wenig angepasst.
Es ist nicht die sauberste Programmierung, aber vielleicht kann es jemand gebrauchen und für seine Zwecke anpassen.
Code: Alles auswählen
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "Can't open the sprite system", 0)
End
EndIf
EnableExplicit
Enumeration Window
#Ticker_Window
EndEnumeration
Global Width.l = GetSystemMetrics_(#SM_CXSCREEN) ;Bildschirmauflösung X
Global Height.l = GetSystemMetrics_(#SM_CYSCREEN) ;Bildschirmauflösung Y
Global TickerHeight.l = Height / 15 ;Tickerhöhe
Global speed.d = 0.3 ;Geschwindigkeit
Global FontWinkel.d = 15
Global Font.s = "Arial"
Global FontSize.l = TickerHeight * 0.6
Global SchattenFarbe.i = RGB(80, 80, 80)
Global SchattenX = 3
Global SchattenY = 1
Global TickerText.s, tmpTickerText.s
Global Dim Text.s(0)
Global xsize.d, xpos1.d, xpos2.d, textl.d
Global a, j, l, le, n, spr, t
Global tmA.d
Structure werte
sprite.i ;Spritenummer für Zeichen
schatten.i ;Sprite Nummer für Schatten
schattenx.d ;Schattenabstand X
schatteny.d ;Schattenabstand Y
tmA.d ;Basislinie von oben
tmD.d ;Basislinie von unten
tmH.d ;Texthöhe
tmW.d ;Textbreite
EndStructure
Global NewMap Zeichen.werte()
;[color=#rrggbb] setzt die Farbe
TickerText = "[color=#ff0000]Dies ist ein Beispieltext für ein Laufband. Zeile 1 "
TickerText + "[color=#0080ff]Nach Zeile 1 folgt dann die zweite Zeile mit einer weiteren wichtigen Nachricht (Datum). %ww, %d. %mmmm %yyyy "
TickerText + "[color=#ff8040]Zum Schluß noch die Uhrzeit: %hh:%ii:%ss Uhr. Dies ist dann Zeile Nummer 3. Weiter geht es wieder mit der ersten Zeile. "
;Sprite im Winkel verzerren
Procedure TransformChar(Sprite.s, Winkel.d)
Protected X1.d = Zeichen(Sprite)\tmA*Tan(Radian(fontwinkel))
Protected X2.d = Zeichen(Sprite)\tmW+Zeichen(Sprite)\tmA*Tan(Radian(fontwinkel))
Protected X3.d = Zeichen(Sprite)\tmW+Zeichen(Sprite)\tmD*Tan(Radian(fontwinkel))* -1
Protected X4.d = Zeichen(Sprite)\tmD*Tan(Radian(fontwinkel))* -1
TransformSprite(Zeichen(Sprite)\sprite, X1, 0, X2, 0, X3, Zeichen(Sprite)\tmH, X4, Zeichen(Sprite)\tmH)
TransformSprite(Zeichen(Sprite)\schatten, X1, 0, X2, 0, X3, Zeichen(Sprite)\tmH, X4, Zeichen(Sprite)\tmH)
EndProcedure
;Text bereinigen
Procedure.s Replace_LineBreaks_to_LF(text$)
If FindString(text$, #CR$)
text$=ReplaceString(text$, #CRLF$, #LF$)
text$=ReplaceString(text$, #LFCR$, #LF$)
ReplaceString(text$, #CR$, #LF$, #PB_String_InPlace)
EndIf
If CreateRegularExpression(0, "\[color=#[0-9a-fA-F]{6}\]")
text$ = ReplaceRegularExpression(0, text$, "")
EndIf
ProcedureReturn text$
EndProcedure
;Zeichengröße ermitteln
Procedure getTextInfo(t.s, text$)
Protected tm.TEXTMETRIC
Protected lg.SIZE
;Protected font = Zeichen(t)\sprite
Protected hdc = GetWindowDC_(WindowID(#Ticker_Window))
text$ = Replace_LineBreaks_to_LF(text$)
If text$
SelectObject_(hdc, FontID(0))
GetTextMetrics_(hdc, @tm.TEXTMETRIC)
GetTextExtentPoint32_(hdc, text$, Len(text$), @lg.SIZE)
Zeichen(t)\tmA = tm\tmAscent
Zeichen(t)\tmD = tm\tmDescent
Zeichen(t)\tmH = tm\tmHeight
Zeichen(t)\tmW = lg\cx
ReleaseDC_(WindowID(#Ticker_Window), hdc)
EndIf
EndProcedure
;Farb String zerlegen
Procedure.i SplitString(string$, delimiter$, Array a.s(1))
If CreateRegularExpression(0, delimiter$)
ProcedureReturn ExtractRegularExpression(0, string$, a())
EndIf
EndProcedure
;Datum und Uhrzeit durch alle möglichen Zeichen ersetzen
Procedure.s FormatDateExZeichen (mask$)
mask$ = ReplaceString(mask$, "%ww", "DFMSTWacdeghimnorstuwy")
mask$ = ReplaceString(mask$, "%w", ".DFMSTWadehinortu")
mask$ = ReplaceString(mask$, "%mmmm", "ADFJMNOSabceghiklmnoprstuvyzä")
mask$ = ReplaceString(mask$, "%mmm", ".ADFJMNOSabcegiklnoprtuvyzä")
mask$ = ReplaceString(mask$, "%yyyy", "0123456789")
mask$ = ReplaceString(mask$, "%yy", "0123456789")
mask$ = ReplaceString(mask$, "%mm", "0123456789")
mask$ = ReplaceString(mask$, "%dd", "0123456789")
mask$ = ReplaceString(mask$, "%hh", "0123456789")
mask$ = ReplaceString(mask$, "%ii", "0123456789")
mask$ = ReplaceString(mask$, "%ss", "0123456789")
mask$ = ReplaceString(mask$, "%d", "0123456789")
mask$ = ReplaceString(mask$, "%m", "0123456789")
mask$ = ReplaceString(mask$, "%h", "0123456789")
mask$ = ReplaceString(mask$, "%i", "0123456789")
mask$ = ReplaceString(mask$, "%s", "0123456789")
ProcedureReturn mask$
EndProcedure
;Tagesname
Procedure.s LocalizedDayName (DayOfWeek.i, short.i=#False)
Protected fmt.i, buffer$, bufferSize.i=80
If DayOfWeek = 0
DayOfWeek = 7
EndIf
If short
fmt = #LOCALE_SABBREVDAYNAME1
Else
fmt = #LOCALE_SDAYNAME1
EndIf
buffer$ = Space(bufferSize)
GetLocaleInfo_(#LOCALE_USER_DEFAULT, fmt + DayOfWeek - 1, @buffer$, bufferSize)
ProcedureReturn buffer$
EndProcedure
;Monatsname
Procedure.s LocalizedMonthName (MonthOfYear.i, short.i=#False)
Protected fmt.i, buffer$, bufferSize.i=80
If short
fmt = #LOCALE_SABBREVMONTHNAME1
Else
fmt = #LOCALE_SMONTHNAME1
EndIf
buffer$ = Space(bufferSize)
GetLocaleInfo_(#LOCALE_USER_DEFAULT, fmt + MonthOfYear - 1, @buffer$, bufferSize)
ProcedureReturn buffer$
EndProcedure
;Datum / Uhr formatieren
Procedure.s FormatDateEx (mask$, date.i=-1)
If date = -1
date = Date()
EndIf
mask$ = ReplaceString(mask$, "%ww", LocalizedDayName(DayOfWeek(date)))
mask$ = ReplaceString(mask$, "%w", LocalizedDayName(DayOfWeek(date), #True))
mask$ = ReplaceString(mask$, "%mmmm", LocalizedMonthName(Month(date)))
mask$ = ReplaceString(mask$, "%mmm", LocalizedMonthName(Month(date), #True))
mask$ = FormatDate(mask$, date)
mask$ = ReplaceString(mask$, "%d", Str(Day(date)))
mask$ = ReplaceString(mask$, "%m", Str(Month(date)))
mask$ = ReplaceString(mask$, "%h", Str(Hour(date)))
mask$ = ReplaceString(mask$, "%i", Str(Minute(date)))
mask$ = ReplaceString(mask$, "%s", Str(Second(date)))
ProcedureReturn mask$
EndProcedure
Procedure SetCharSprite(t)
If Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\sprite = 0
Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\sprite = spr
Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\schatten = spr +1
Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\schattenx = schattenx
Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\schatteny = schatteny
LoadFont(0, Font, FontSize)
;LoadFont(0, Font, Random(70,30))
getTextInfo(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)), Mid(tmpTickerText, t, 1))
;Zeichen
CreateSprite(Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\sprite,
Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\tmW,
Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\tmH)
If StartDrawing(SpriteOutput(Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\sprite))
DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_Outlined)
DrawingFont(FontID(0))
DrawText(0, 0, Mid(tmpTickerText, t, 1), RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2))))
StopDrawing()
EndIf
;-Schatten
CreateSprite(Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\schatten,
Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\tmW,
Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\tmH)
If StartDrawing(SpriteOutput(Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\schatten))
DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_Outlined)
DrawingFont(FontID(0))
DrawText(0, 0, Mid(tmpTickerText, t, 1), schattenfarbe)
StopDrawing()
EndIf
TransformChar(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)), fontwinkel)
FreeFont(0)
spr +2
EndIf
EndProcedure
OpenWindow(#Ticker_Window, 0, 0, width, TickerHeight, "", #PB_Window_BorderLess)
OpenWindowedScreen(WindowID(#Ticker_Window), 0, 0, width, TickerHeight, 1, 0, 0, #PB_Screen_NoSynchronization)
SpriteQuality(#PB_Sprite_BilinearFiltering)
LoadFont(0, Font, TickerHeight)
getTextInfo("0", " ")
tmA = TickerHeight / Zeichen("0")\tmH * Zeichen("0")\tmA
tmpTickerText = FormatDateExZeichen (TickerText)
SplitString(tmpTickerText, "\[color=#[0-9a-fA-F]{6}\]", Text())
xsize = Width
For j=0 To ArraySize(Text())
tmpTickerText = Right(tmpTickerText, Len(tmpTickerText)-Len(Text(j)))
a = FindString(tmpTickerText, "[color=#")
If a
For t = 1 To Len(Left(tmpTickerText, a-1))
SetCharSprite(t)
Next
tmpTickerText = Right(tmpTickerText, Len(tmpTickerText)-a+1)
Else
For t = 1 To Len(tmpTickerText)
SetCharSprite(t)
Next
EndIf
Next
Repeat
ClearScreen(0)
xsize -speed
xpos1 = xsize
Repeat
tmpTickerText = FormatDateEx(TickerText)
Dim Text(0)
SplitString(tmpTickerText, "\[color=#[0-9a-fA-F]{6}\]", Text())
n = 1 : l = 0
For j = 0 To ArraySize(Text())
tmpTickerText = Right(tmpTickerText, Len(tmpTickerText)-Len(Text(j)))
a = FindString(tmpTickerText, "[color=#")
If a
le = Len(Left(tmpTickerText, a-1))
Else
le = Len(tmpTickerText)
EndIf
For t = 1 To le
;Schatten
DisplayTransparentSprite(Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\schatten,
xpos1 + xpos2 + Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\schattenx,
tmA-Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\tmA + Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\schatteny)
;Zeichen
DisplayTransparentSprite(Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\sprite,
xpos1 + xpos2,
tmA-Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\tmA)
xpos1 +Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\tmW
l +Zeichen(font + ":" + Str(RGB(Val("$"+Mid(Text(j), 9, 2)), Val("$"+Mid(Text(j), 11, 2)), Val("$"+Mid(Text(j), 13, 2)))) + ":" + StrD(FontSize) + ":" + Asc(Mid(tmpTickerText, t, 1)))\tmW
If xpos1 > width : n=0: Break 3 : EndIf
Next
If a
tmpTickerText = Right(tmpTickerText, Len(tmpTickerText)-a+1)
EndIf
Next
textl = l
ForEver
If textl And xsize < -textl
xsize + textl
textl = 0
EndIf
If n
xpos2 = xpos1 - width
xpos1 = width
EndIf
FlipBuffers()
WindowEvent()
Delay (1)
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
ForEver