| |
VB.NET - Ein- und UmsteigerRTF Box mit Timer scrollen | | | Autor: LesPaul | Datum: 17.07.21 17:45 |
| Moin Forum,
ich versuche eine RichTextBox per Timer zu scrollen,
habe es versucht mit
Private Declare Function GetScrollPos Lib "user32.dll" (ByVal hwnd As Int32, _
ByVal nBar As Int32) As Int32
Private Declare Function SetScrollPos Lib "user32.dll" (ByVal hwnd As _
Int32, _
ByVal nBar As Int32, ByVal nPos As Int32, ByVal bRedraw As Int32) As Int32 dann suche ich den Startpunkt
iScrollPos = GetScrollPos(Me.rtfCL.Handle.ToInt32(), 1) dann setze ich im Timer die nächsten Positionen
........
iScrollPos += 1
SetScrollPos(Me.rtfCL.Handle.ToInt32(), 1, iScrollPos, 1) der Scrollbalken bewegt sich auch so wie er soll, nur der Text folgt nicht.
Kleiner Haken, es fängt erst dann an, wenn man manuell in die RTF Box geklickt hat, den Focus zu setzen reicht leider nicht.
Wenn ich das ganze manuell über einen Button auslöse, geht es
wenn jemand eine Idee hätte?
LesPaul | |
Re: RTF Box mit Timer scrollen | | | Autor: Manfred X | Datum: 18.07.21 14:05 |
| Hallo!
Meinst Du so etwas ?
Public Class frmScrollRTF
Dim rtf As New RichTextBox With {.Parent = Me, .Size = New Drawing.Size( _
300, 400)}
Dim WithEvents tim As New Timer With {.Interval = 1000}
Private Sub frmScrollRTF_Load(sender As Object, e As EventArgs) Handles _
MyBase.Load
'Einige Zeilen
Dim stb As New Text.StringBuilder(1000)
For i As Integer = 1 To 100
stb.Append(i.ToString & " " & "asaqsad12324 " & vbCrLf)
Next i
rtf.Text = stb.ToString
tim.Enabled = True
End Sub
Private Sub tim_Tick(sender As Object, e As EventArgs) Handles tim.Tick
Static pos As Integer
pos += 1
If pos = rtf.Lines.Count Then pos = 0
Dim c As Integer = rtf.GetFirstCharIndexFromLine(pos)
rtf.SelectionStart = c
rtf.SelectionLength = 0
rtf.ScrollToCaret()
End Sub
End Class | |
Re: RTF Box mit Timer scrollen | | | Autor: LesPaul | Datum: 19.07.21 09:37 |
| guten Morgen Manfred,
vielen Dank für die Antwort,
Zeile für Zeile scrollen ist leider nicht die ideale Lösung,
es geht darum Lyrics mit eventuellen Zusatzinfos zu lesen, und dann ist dieses "Geruckel" auf Dauer nicht wirklich ideal, brauchte also so was ähnlich einem Abspann. Dabei ist mir schon klar dass es nicht ganz ohne geht.
Beispiel, 100 Zeilen Text
- Textzeile + 2 Zeilen zusätzliche Infos + Leerzeile (RTF weil unterschiedlich formatiert)
- diese müssen innerhalb 2,5 Sekunden durchlaufen
dabei wären auch unterschiedliche Zeiten möglich, also Zeile 25, 36 ... bekommen nur 1,5 Sekunden.
Zeilen Informationen kommen aus einer DB, ist aber nicht das Problem
vielleicht sollte ich einfach die ganze Box auf ein Panel legen und diese dann nach oben ins Nirvana scrollen?
Gruß, LesPaul | |
Re: RTF Box mit Timer scrollen | | | Autor: -Franky- | Datum: 22.07.21 07:49 |
| Hi
Sende per API SendMessage die Message EM_GETRECT an die RTFBox um die aktuelle RECT zu ermitteln (Größe des sichtbaren Bereiches). Im Timer ziehst von RECT.Top entsprechend einen Wert ab (in Pixel) um den der Text nach oben verschoben werden soll so das ein negativer Wert in RECT.Top entsteht. Sende den veränderten RECT per SendMessage und EM_SETRECT an die RTFBox zurück.
Nur so am Rande: Deine API Deklarationen für GetScrollPos und SetScrollPos sind nicht korrekt. hwnd ist kein Int32 sondern ein IntPtr.
Mit freundlichen Grüßen
-Franky-
Beitrag wurde zuletzt am 22.07.21 um 08:11:15 editiert. | |
Re: RTF Box mit Timer scrollen | | | Autor: LesPaul | Datum: 22.07.21 10:15 |
| Hallo Franky,
vielen Dank auch für deine Antwort,
muss mir aber ein komplett anderes Konzept überlegen, da egal welche Lösung ich mache, solange ich diesen Timer nutze wird es nicht funktionieren. Ist ja eigentlich hinreichend beschrieben, Zeiten im mS Bereich sind sehr willkürlich. Habe es dennoch probiert da der Wert bzw. die Genauigkeit hier an sich vollkommen egal sind solange der Timer konstant läuft, aber auch das macht er nicht.
Gruß, LesPaul | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|