Toon posts:

[VB] MultiLine TextBox regels naar String

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben met een programma bezig en daarin moet ik de data van een MultiLine TextBox naar een bestand schrijven. Nu het volgende:

Als ik handmatig de tekst in de TextBox type is het geen probleem omdat er op deze manier Enters worden gegeven en de tekst opsplitsen dus geen probleem is. Paste ik echter gewoon tekst van bijvoorbeeld internet in de TextBox is deze tekst één lange String, maar in de TextBox wordt deze tekst wel op de verschillende regels gezet door de width van de TextBox.

Wat ik wil is de tekst per regel in verschillende Strings zetten op de manier zoals de tekst in de TextBox staat. Ik dacht zelf Trim((Mid etc)), maar omdat je tekst plakt en een woord valt net over de max width van de TextBox wordt ie op de volgende regel gezet maar er komen geen spaties op de vorige regel, waardoor het knippen op lengte geen zin heeft.

Heeft iemand een oplossing?

Alvast bedankt..

Verwijderd

Volgens mij kan je dat met Text1.Scrollbars regelen. Probeer ff een paar standen uit. Verder snap ik je probleem niet echt...

Verwijderd

Topicstarter
Om het wat duidelijker te maken...

Afbeeldingslocatie: http://members.tripodnet.nl/bucc2k2/textbox.jpg

Het gaat om het rood omcirkelde gedeelte. Dit is niks (geen spaties) omdat het geplakte tekst is uit één regel en het woord komen niet in die ruimte past. Nu wil ik die eerste regel uit de TextBox in een String hebben en de tweede regel uit de TextBox ook.

String1: "Dit is regel 1 en moet in een string"
String2: "komen. Dit is regel 2.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Om dit tijdstip heb ik geen zin om ff verder uitleg te zoeken, maar kijk eens rond op MSDN en dan met name waar ze het hebben over EM_GETLINE en EM_GETLINECOUNT (Win32 API).

[edit]
Die gebruik je via de SendMessage API, en uh MSDN verteld je er een stuk meer over ;) Ik morgen misschien... :)

Exact expert nodig?


Verwijderd

Mischien kan het makkelijker met Form1.TextWidth(sDeString) als je namelijk een loopje maakt waarbij sDeString steeds één karakter langer wordt, en als dat op een gegeven moment de TextWidth van die string breder is dan die van Text.Width, weet je dat je naar de volgende regel gaat! Is dit wat :?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Op zaterdag 26 januari 2002 10:15 schreef KoenM het volgende:
Is dit wat :?
Op zich wel, maar het klinkt een stuk ingewikkelder dan een paar api calls :)

Exact expert nodig?


Verwijderd

Op zaterdag 26 januari 2002 11:41 schreef Crazy_D het volgende:
Op zich wel, maar het klinkt een stuk ingewikkelder dan een paar api calls :)
Valt wel mee denk ik. In drie of vier regels moet het bovenstaande wel te proggen zijn...

Zeker als beginner kan je je nog weleens verslikken in alle API calls die je hebt... Dan is een simpel loopje wel zo makkelijk :)

Verwijderd

Topicstarter
Bedankt voor de tips, ik ga eens kijken of ik er nu uitkom :)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Ok heb ff wat in elkaar geknutseld. Zo moeilijk is de API niet :P

Form: textboxje erop droppen, Text1, Multiline op True zetten.
En een buttontje erbij, Command1.

Plakken in de general sectie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
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_GETLINE = &HC4
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_LINELENGTH = &HC1

Private Const EM_LINEINDEX = &HBB

En "ergens":
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Command1_Click()
    Dim lAantalRegels As Long, lLine As Long
    Dim lLengte As Long, lCharIndex As Long
    Dim sBuffer As String
    
    lAantalRegels = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0, ByVal 0)
    MsgBox "Aantal regels: " & lAantalRegels
    
    For lLine = 0 To lAantalRegels - 1
      ' ophalen van de "character index" van de regel die we willen lezen
      lCharIndex = SendMessage(Text1.hwnd, EM_LINEINDEX, lLine, ByVal 0)
      
      ' lengte van die regel bepalen...
      lLengte = SendMessage(Text1.hwnd, EM_LINELENGTH, lCharIndex, ByVal 0)
      ' ... zodat we buffer de juiste size kunnen maken
      sBuffer = Space$(lLengte + 1)
      
      ' lees regeltje, als de return waarde 0 is, is er iets niet goed..
      If SendMessage(Text1.hwnd, EM_GETLINE, lLine, ByVal sBuffer) <> 0 Then
        MsgBox "Regel " & lLine + 1 & ": " & sBuffer
      End If
    Next ' lLine
End Sub

Exact expert nodig?


Verwijderd

Topicstarter
Hiermee moet het lukken, mijn dank is groot :)
Pagina: 1