Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0533: Textbox druckfähig in Array stellen

 von 

Beschreibung 

Dieser Tipp teilt jede Zeile einer Textbox auf und stellt jede Zeile in ein Array. Dies ist praktisch wenn man eine große Textbox drucken will, so kann jede Zeile einzeln zum Drucker gegeben werden.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

SendMessageA (SendMessage)

Download:

Download des Beispielprojektes [3,04 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'--- Anfang Projektdatei Textbox druckfaehig in Array stellen.vbp ---
'--- Anfang Formular "Form1" alias Textbox druckfaehig in Array stellen.frm ---
' Steuerelement: Listen-Steuerelement "List1"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Textfeld "Text1"
' Steuerelement: Beschriftungsfeld "Label2"
' Steuerelement: Beschriftungsfeld "Label1"
'
' Autor: Peter K. Sauer - peter.k.sauer@web.de   26.09.2001

Option Explicit

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
                            
Const EM_GETLINECOUNT = &HBA
Const EM_LINEFROMCHAR = &HC9
 
 
Public Function GetTextBoxZeilen(Tbox As TextBox, Zeilen() As String) _
  As Long

  'liefert Anzahl der dargestellten Zeilen einer Textbox und übergibt die
  'Zeileninhalte in einem StringArray

   Dim LineNo As Long
   Dim LineLast As Long
   Dim LineStart As Long
   Dim i As Long
   
      'Anzahl der dargestellten Zeilen ermitteln
      LineNo = SendMessage(Tbox.hwnd, EM_GETLINECOUNT, 0, 0&)
      ' Array soweit erweitern, das alle Zeilen hineinpassen
      ReDim Zeilen(LineNo)
      
      For i = 0 To Len(Tbox.Text) - 1
         'Zeilennummer für aktuelles Zeichen
         LineNo = SendMessage(Tbox.hwnd, EM_LINEFROMCHAR, i, 0&)
         If LineNo <> LineLast Then
            'Zeilenwechsel, Zeichen an Zeile zuweisen
            Zeilen(LineLast) = Mid(Tbox.Text, LineStart + 1, i - LineStart)
            LineLast = LineNo
            LineStart = i
         End If
      Next
      
      'letzte Zeile
      Zeilen(LineLast) = Mid(Tbox.Text, LineStart + 1, i - LineStart)
      
      'CrLf´s (Zeilenumbrueche) entfernen
      For i = LBound(Zeilen) To UBound(Zeilen)
         Zeilen(i) = Replace(Zeilen(i), vbCrLf, "")
      Next
      
      ' Rückgabe der Zeilenanzahl
      GetTextBoxZeilen = UBound(Zeilen)
 
End Function



Private Sub Command1_Click()

  ' Das Array, das jede Zeile einzeln enthält
  Dim einzelnezeilen() As String
  
  Dim i
  
  ' Aufrufen der Funktion und übergabe der Zeilenanzahl an Label1
  Label1 = GetTextBoxZeilen(Text1, einzelnezeilen())
                                                    
  ' Alle einzelnen Zeilen durchgehen und
  For i = 0 To UBound(einzelnezeilen)
    ' in List1 hinzufügen
    List1.AddItem einzelnezeilen(i)
  Next i
End Sub
'--- Ende Formular "Form1" alias Textbox druckfaehig in Array stellen.frm ---
'--- Ende Projektdatei Textbox druckfaehig in Array stellen.vbp ---

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 2 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von VbLerner am 09.01.2005 um 00:56

Gibt es eine Ähnliche Funktion bzw Prozedur, alle
vorkommenden Wörter einzeln in eine Listbox zu addieren ?

Kommentar von worel am 16.12.2004 um 01:07

Und wie wird ausgedruckt ????

For r = 1 To List1.ListCount
Printer.Print List1.List(r)
Next

..oder wie? Das Drucken hätte man ruhig in das Projekt implementieren können.