Rubrik: Grafik und Font · Grafische Effekte | VB-Versionen: VB2005 - VB2015 | 12.02.16 |
Laufschrift in vb.net mit minimalem Aufwand Eine flackerfreie Laufschrift mit einfachen Bordmitteln zu erstellen ist nicht schwer. | ||
Autor: Michael Mess | Bewertung: | Views: 9.160 |
www.mmsoftware.de | System: Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wie man eine Laufschrift erzeugen kann, möglichst noch flackerfrei, kann man in vielen Tipps nachlesen. Als ich die ersten paar Tipps durchgelesen hatte, war ich überrascht, wie aufwändig die Lösungen sind. Ich hatte keine Lust, zur Implementierung dieser Funktionalität viel Zeit zu verbringen und fand eine bestechend kurze Lösung, die auf Anhieb funktionierte. Auch mit Proportionalschrift ohne viel Rechnerei!
Vorgehensweise: ein Panel in der gewünschten Breite auf die Form legen (das nennen wir mal panelLaufschrift, in dieses Panel hinein zwei Label mit Autosize=true, benannt lblLaufschrift1 und lblLaufschrift2 und zwar nebeneinander auf gleiche Höhe. Dann noch einen Timer, genannt timerLaufschrift, mit Interval=25 anlegen.
Hier erst mal der Code, bestehend aus 2 Subs:
Private Sub Laufschrift(ByVal LaufText As String) With lblLaufschrift1 .Text = LaufText If .Width > panelLaufschrift.Width Then lblLaufschrift2.Text = LaufText timerLaufschrift.Enabled = True lblLaufschrift2.Left = .Left + .Width + 5 Else .Left = 0 lblLaufschrift2.Text = "" timerLaufschrift.Enabled = False End If End With End Sub
Private Sub timerLaufschrift_Tick(sender As Object, e As EventArgs) _ Handles timerLaufschrift.Tick lblLaufschrift1.Left -= 1 lblLaufschrift2.Left -= 1 If lblLaufschrift2.Left <= 1 Then lblLaufschrift1.Left = 0 lblLaufschrift2.Left = lblLaufschrift1.Width + 5 End If End Sub
Private Sub Form1_Resize(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Resize Laufschrift(lblLaufschrift1.Text) End Sub
Erläuterung:
Die Sub "Laufschrift" wird mit dem Text aufgerufen, der laufen soll. Ist dieser kleiner als der zur Verfügung stehende Raum (lblLaufschrift1.width <= panelLaufschrift.width), dann hat er Platz, muss nicht laufen, also kann auch
der Timer disabled werden. Ansonsten wird das zweite Label mit dem gleichen Text gefüllt und der Timer enabled.
Pro Timerschritt wird jedes Label um ein Pixel nach links geschoben. Ist das erste Label dadurch ganz nach links aus dem Panel gewandert, werden die Rollen vertauscht, das erste Label steht linksbündig und das zweite Label folgt wieder rechts daneben. Den Abstand zwischen den beiden Labels kann man natürlich nach Gusto variieren, hier mal mit 5 angenommen.
Wird das Fenster vergrößert bzw. verkleinert wird die Prozedur "Laufschrift" erneut aufgerufen, denn bei dynamischer Veränderung der Panelgröße könnte es jetzt sein, dass der Text plötzlich reinpasst und er eigentlich nicht mehr laufen sollte. Und umgekehrt, schiebt man die Form enger, soll er loslaufen.