Avatar billede christianw Nybegynder
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
Avatar billede sjh Nybegynder
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
Avatar billede sjh Nybegynder
10. oktober 2001 - 23:10 #2
Du kan også bruge en TextBox.
Avatar billede christianw Nybegynder
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.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester