10. oktober 2001 - 17:14
Der er
2 kommentarer og
1 løsning
Læs linier i en richtextbox
Er der nogen derude der kender en hurtig metode til at læse en richtextbox linie for linie, evt. vha. API. (UpTo & Span går for langsomt med store filer (> 1MB)
Den hurtigste metode jer endnu har fundet ser sådan ud:
with RTFBox
SlutPos = Len(.Text)
Do While .SelStart < SlutPos
StartPos = .SelStart \'sæt den nye startpos
.Span Chr(10), True, True \'select frem til næste linieskift
tmpPos = StartPos + .SelLength \'...selstart på dette tidspunkt
\'process .seltext
.SelStart = tmpPos + 2 \'ryk cursor 2 frem
Loop
end with
...men, som sagt - dette går for langsomt
10. oktober 2001 - 23:08
#1
Ja, hvorfor ikke API. :-)
Private Declare Function SendMessage Lib \"user32\" Alias \"SendMessageA\" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Private Const EM_GETLINE = &HC4
Private Const EM_LINEINDEX = &HBB
Private Const EM_LINELENGTH = &HC1
Private Function GetLineString(ThehWnd As Long, Linenumber As Long) As String
Dim lngLength As Long
Dim lngLineIndex As Long
Dim ret As Long
Dim Buffer As String
lngLineIndex = SendMessage(ThehWnd, EM_LINEINDEX, Linenumber - 1, 0&)
lngLength = SendMessage(ThehWnd, EM_LINELENGTH, lngLineIndex, 0&)
Buffer = Chr$(lngLength And (255)) + Chr$(Int(lngLength / 256)) + Space$(lngLength - 2)
ret = SendMessage(ThehWnd, EM_GETLINE, Linenumber - 1, Buffer)
GetLineString = Left$(Buffer, ret)
End Function
Private Sub Command1_Click()
\'Text2.Text = GetLineString(RTFBox.hwnd, 1) \'Linje 1
Text2.Text = GetLineString(RTFBox.hwnd, 2) \'Linje 2
\'Text2.Text = GetLineString(RTFBox.hwnd, 3) \'Linje 3
End Sub
Private Sub Form_Load()
With RTFBox
.Text = \"line one\" & vbCrLf
.Text = .Text & \"line two\" & vbCrLf
.Text = .Text & \"line three\"
End With
End Sub
23. oktober 2001 - 17:56
#3
Hej sjh
Jeg er netop kommet fra ferie, så derfor det sene svar.
Fordi jeg også skulle bruge forskellig farve- og formatteringsinfo har jeg implementeret EM_SETSEL i løsningen og det virker. Du fik mig på rette vej, så pointene er dine.