Text in Rich Text Box formatieren

22/07/2009 - 21:42 von Dominik Schmidt | Report spam
Hallo,

ich möchte gerne Text in einer Rich Text Box wàhrend der Eingabe
formatieren.
Dazu gehe ich bei jeder Änderung mehrere Schleifen durch, die den Text
prüfen und bestimmte Textabschnitte formatieren, also Textfarbe und
Texthintergrundfarbe veràndern.
Das funktioniert prinzipiell auch.

Allerdings mache ich das, indem ich den Text markieren lasse und dann den
markierten Text anpassen lasse.
Das Problem besteht nun darin, dass sich die Position der vertikalen
Scrollbar logischerweise bei jeder Änderung àndert (die Cursorposition ist
in der ersten anzeigbaren Zeile).

Das stört mich - es muss doch eine professionellere Möglichkeit geben, Text
von Positon a bis Position b zu formatieren?
Ich habe noch nichts dazu finden können...
 

Lesen sie die antworten

#1 Paul Pierot
23/07/2009 - 13:08 | Warnen spam
Am 22.07.2009 schrieb Dominik Schmidt:

Hallo,

ich möchte gerne Text in einer Rich Text Box wàhrend der Eingabe
formatieren.
Dazu gehe ich bei jeder Änderung mehrere Schleifen durch, die den Text
prüfen und bestimmte Textabschnitte formatieren, also Textfarbe und
Texthintergrundfarbe veràndern.
Das funktioniert prinzipiell auch.

Allerdings mache ich das, indem ich den Text markieren lasse und dann den
markierten Text anpassen lasse.
Das Problem besteht nun darin, dass sich die Position der vertikalen
Scrollbar logischerweise bei jeder Änderung àndert (die Cursorposition ist
in der ersten anzeigbaren Zeile).




Im KeyPress oder Change - Event rufst du Text_einfaerben auf.
Müsste gehen, ist aber bei langen Texten langsam, je nachdem was du
alles einfàrben willst.

'Deklarationen:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As
Long, ByVal wParam As Long, lParam As Any) As Long

Private Const EM_GETTHUMB = &HBE
Private Const SB_THUMBPOSITION = 4
Private Const WM_VSCROLL = &H115

Private Declare Function LockWindowUpdate Lib "user32" _
(ByVal hWndLock As Long) As
Long


'Code:
Private Sub Text_einfaerben()
Dim ScrollPos As Long
Dim posStart As Long, posLength As Long

With RichTextBox1
ScrollPos = GetScrlPos(.hWnd)
posStart = .SelStart: posLength = .SelLength
LockWindowUpdate .hWnd'verhindert das Flackern der Textbox

'
'hier der Code um deinen Text einzufàrben:
'...
'

.SelStart = posStart: .SelLength = posLength
Call SetScrlPos(.hWnd, ScrollPos)
LockWindowUpdate 0
End With
End Sub

'Gibt die Position der vertikalen Scrollleiste zurück:
Private Function GetScrlPos(hWnd As Long) As Long
Dim lngwParam As Long, lngNowPos As Long
lngNowPos = SendMessage(hWnd, EM_GETTHUMB, 0, 0)
lngwParam = SB_THUMBPOSITION + lngNowPos * &H10000
GetScrlPos = lngwParam
End Function

'Setzt die vertikale Scrolleiste auf einen vorgegebenen Wert:
Private Sub SetScrlPos(hWnd As Long, lngwParam As Long)
SendMessage hWnd, WM_VSCROLL, lngwParam, 0
End Sub


Das stört mich - es muss doch eine professionellere Möglichkeit geben, Text
von Positon a bis Position b zu formatieren?
Ich habe noch nichts dazu finden können...



IMHO nicht mit Bordmitteln, da musst du dir vermutlich eine dll
erstellen.

Einen Gruß von
Paul Pierot

Ähnliche fragen