vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
RTF 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: RTF Box mit Timer scrollen 
Autor: -Franky-
Datum: 22.07.21 12:02

Hi

Evtl hilft es ja den normalen Timer hiermit zu ersetzen: https://www.nimaara.com/high-resolution-clock-in-net/ Es gibt sich auch noch andere Lösungen für einen HiResolution Timer.

Mit freundlichen Grüßen
-Franky-

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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