| SendMessageAsString, SendMessageAsLong |
| |
| |
| Private Declare Function SendMessageAsString Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, _ |
| ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long |
| Private Declare Function SendMessageAsLong Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, _ |
| ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long |
| |
| Private Buffer$, LCount%, ByteLo%, ByteHi%, N&, X& | |
| Const EM_GETLINE = 196 | Parameter nicht verändern (das ist keine Breite / Höhe). |
| Const EM_GETLINECOUNT = 186 | Parameter nicht verändern (das ist keine Breite / Höhe). |
| Const MAX_CHAR_PER_LINE = 90 | Zeilenbreite (darf aber nicht schmaler als die TextBox sein). |
| Wenn man den Wert erhöht, kann man die TextBox |
| Private Sub cmdAPIPrint_Click() | beliebig verbreitern. |
| Printer.FontSize = 14 | |
| Printer.Print "" | |
| Printer.Print Tab(12); "Überschrift" | |
| Printer.Print "" | |
| Printer.FontSize = 10 | |
| X = funcLineCount&() | Funktions-Aufruf zum Zählen der Zeilen in TextBox. |
| For N = 1 To X | |
| Buffer = funcLine$(N - 1) | Zeilenweises Lesen. |
| Printer.Print Tab(16); Buffer | Zeilenweises Drucken --> |
| Next N | |
| Printer.Print Tab(15); "________________________________________________________________________" |
| Printer.EndDoc | |
| End | |
| End Sub | |
| |
| Private Function funcLineCount&() | |
| LCount = SendMessageAsLong(Text1.hWnd, EM_GETLINECOUNT, 0, 0) |
| funcLineCount& = LCount | |
| End Function | Parameter-Veränderung ohne Wirkung. |
| |
| Private Function funcLine$(LineNumber As Long) | |
| ByteLo = MAX_CHAR_PER_LINE And (255) | Parameter nicht verändern (Ausgabebreite). |
| ByteHi = Int(MAX_CHAR_PER_LINE / 256) | |
| Buffer$ = Chr$(ByteLo%) + Chr$(ByteHi%) + Space$(MAX_CHAR_PER_LINE - 2) |
| X = SendMessageAsString(Text1.hWnd, EM_GETLINE, LineNumber, Buffer$) |
| funcLine$ = Left$(Buffer$, X) | | |
| End Function | |
| |
| |
| |
| |
| |
| |
| |
| Bei der "normalen" Programmierung hingegen wird der ganze Inhalt der TextBox als ein String gelesen. |
| Private Sub cmdNormalPrint_Click() | |
| Dim Anzahl$, FormString$, EinzelZeichen$, TextStringNEU$, i% | |
| Anzahl = Len(frmPrint.Text1) | Anzahl = Gesamte Textlänge in der TextBox. |
| FormString = frmPrint.Text1 | |
| For i = 1 To Anzahl | |
| EinzelZeichen = Mid(FormString, i, 1) | |
| If EinzelZeichen <> vbCr And EinzelZeichen <> vbLf Then | Den Umbruch prüft man mit einer UND-Verknüpfung, in der |
| TextStringNEU = TextStringNEU & EinzelZeichen | VBCR und VBLF einzeln abgefragt werden müssen. Ohne |
| End If | diese Abfrage würde der Umbruch nicht gefunden. |
| Next | |
| MsgBox TextStringNEU | |
| End Sub | TextBox-Inhalt wird als ein String in MsgBox |
| ausgegeben: |
| |
| |
| |
| |
| |
| |
| . |
| |