Seite 1 von 2
Laufschrift
Verfasst: 19.05.2008 14:43
von The_Dark_Zim-.-
Hey ho
Ich brauch mal wieder eure hilfe ^^
Ich bin im moment dabei einen Musikplayer zu basteln.
Nun würde ich gerne den Titel als Laufschrift anzeigen lassen!
Mein Problem ist nur wie lass ich den Text gleichmäßig/ruckelfrei laufen?? Ohne dabei zuviel Leistung zu verbrauchen.
Hoffe ihr habt eine lösung^^
In der Sufu konnte ich nix brauchbares finden.
Gruß ZIM
Verfasst: 19.05.2008 14:58
von RSBasic
Verfasst: 19.05.2008 15:06
von The_Dark_Zim-.-
Hm das ist nicht ganz was ich gesucht habe. Ich wollte einfach Text darstellen und den laufen lassen, nicht den Fenstertitel. Und ruckelfrei ist das auch nicht ^^.
Aber trotzdem schonmal danke.
Verfasst: 19.05.2008 15:10
von Rokur
Wenn es "ruckelfrei" sein soll musst du es pixelweise scrollen und nicht buchstabenweise.
Ein weiteres Problem von diesen Textscrollern ist das mit der Schriftart:
Schriftarten bei denen alle Buchstaben gleich groß sind (z.B. "Courier New") scrollen gleichmäßig, Schriftarten mit verschieden großen Buchstaben (z.B. "Arial") scrollen bei jedem Buchstaben unterschiedlich schnell.
Eine sinnvollere Möglichkeit ist folgende:
Schreibe den Text den du darstellen willst auf ein Gadget oder ein Image und scrolle dann das Gadget/Image pixelweise über das Fenster.
Verfasst: 19.05.2008 15:22
von The_Dark_Zim-.-
Ich hab das bisher immer so gemacht das der Titel immer um einen Pixel verschoben wurden, wenn er durch die Repeatschleife gelaufen ist. Das ist mir aber zuviel am ruckeln. Im Moment stell ich den Text auf einem Bild da. Aber das Bild soll nicht mitscrollen, weil das scheisse aussehen würde!
Kann man nicht eine art Uhr machen und dann den Text jede Sekunde um einen Pixel verschieben ?
Verfasst: 19.05.2008 15:32
von Kiffi
Verfasst: 19.05.2008 15:35
von Rokur
Ein zeitgesteuerter Text-Scroller, das Image bleibt an seinem Platz, nur die Position vom Text ändert sich:
Code: Alles auswählen
EnableExplicit
#app = "Text-Scroller"
#width = 300
#height = 200
Enumeration
#txt
EndEnumeration
CreateImage(#txt, #width, 20)
Define text.s = "Das ist der Text, welcher möglichst lang sein sollte damit es was zu scrollen gibt.."
StartDrawing(ImageOutput(#txt))
Define length.l = TextWidth(text) + #width
StopDrawing()
Define pos.l = #width
Define speed.l = 10 ;Millisekunden pro Pixel
Define zeit.l = ElapsedMilliseconds()
Define event.l
OpenWindow(0, 0, 0, #width, #height, #app, #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
CreateGadgetList(WindowID(0))
Repeat
event = WindowEvent()
Select event
Case 0
Delay(1)
Case #PB_Event_CloseWindow
End
EndSelect
Gosub scrollText
ForEver
End
scrollText:
If zeit+speed < ElapsedMilliseconds()
zeit = ElapsedMilliseconds()
StartDrawing(ImageOutput(#txt))
DrawText(pos,0,text,#Yellow,#Black)
StopDrawing()
StartDrawing(WindowOutput(0))
DrawImage(ImageID(#txt),0,0)
StopDrawing()
pos - 1
If pos < -length+#width
pos = #width
EndIf
EndIf
Return
Verfasst: 19.05.2008 15:35
von milan1612
Guckst du hier:
Code: Alles auswählen
Global CurrentX = 290
Global Text.s = "Ich bin ein langer, langer Text, der von rechts nach links gescrollt wird ;-)"
Procedure Callback(WindowID.l, Msg.l, wParam, lParam)
If Msg = #WM_TIMER
StartDrawing(ImageOutput(0))
Box(0, 0, 290, 65, 0)
DrawingFont(FontID(0))
DrawText(CurrentX, 22, Text, RGB(255, 0, 0), 0)
CurrentX - 2
If CurrentX < -TextWidth(Text)
CurrentX = 290
EndIf
StopDrawing()
SetGadgetState(0, ImageID(0))
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 0, 0, 300, 100, "TextScroller", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
CreateImage(0, 290, 65, 32)
ImageGadget(0, 5, 5, 290, 65, ImageID(0))
ButtonGadget(1, 5, 75, 290, 20, "Exit")
SetWindowCallback(@Callback())
SetTimer_(WindowID(0), 0, 20, 0)
LoadFont(0, "Courier New", 14, #PB_Font_Bold | #PB_Font_HighQuality)
Repeat
Event = WaitWindowEvent(5)
If Event = #PB_Event_Gadget And EventGadget() = 1
Break
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
EDIT: Ähh, 4 Sekunden zu spät...

Verfasst: 19.05.2008 15:46
von rolaf
Verfasst: 19.05.2008 19:56
von Kaeru Gaman
scrolltext bei Playern scrollt aber immer zeichenweise, nicht pixelweise.
wenn das nicht "ruckelfrei" ist, dann ist der timer schlecht.
es sollte doch nicht das problem sein, einem textgadget ne proportionalschriftart zuzuweisen,
und den textinhalt per timercallback zu aktualisieren...