Hallo
bin so gut wie fertig mit meinem programm
wenn da nicht dieser eine fehler ist
und zwar macht die druck-prozedur keine atum. zeilenumbrüche, wenn
das textfeld länger ist als eine A4-Seite. Der selbe effekt ist auch, wenn
man im textfeld beim zeilenende nicht die entertaste drückt.
hier ist meine komplette druck-prozedur (modul)Option Explicit
' definiert den Abstand vom Blattkopf In cm
Const MarginTop = 1.2
' definiert den Abstand vom Blattfuss In cm
Const MarginBottom = 1
' definiert den Abstand von der linken Seite In cm
Const MarginLeft = 1
' definiert den Abstand von der rechten Seite In cm
Const MarginRight = 1
' definiert den Abstand zwischen den einzelnen Objekten
Const MarginText = 0.1
' definiert die Rahmenart
Const BorderTop = True
Const BorderBottom = True
Const BorderLeft = True
Const BorderRight = True
' legt fest, ob die Seiten gezählt werden
Const CountPages = True
' legt fest, ob eine Kopfzeile angezeigt werden soll
Const HeadLine = True
' setzt den Zaehler für die Seitenzahlen
Dim NumPages As Integer
Public Sub PrintText(Expression As String, Optional FontName As _
String = "Arial", Optional FontSize As Long = 12)
Dim n As Integer
Dim Lines() As String
NumPages = 0
' mit cm skalieren
Printer.ScaleMode = 7
' Schriftart wählen
Printer.FontName = "Arial"
' Schriftgröße wählen
Printer.FontSize = 10
Call NextPage(False)
Lines = Split(Expression, vbCrLf)
For n = 0 To UBound(Lines)
Call PrintLeft(Lines(n), Printer.CurrentY)
Next n
Printer.EndDoc
End Sub
Private Sub NextPage(NewPage As Boolean)
If NewPage Then
Printer.NewPage
End If
NumPages = NumPages + 1
If BorderTop Then
Printer.Line (0 + MarginLeft - MarginText, 0 + MarginTop - _
MarginText) -(Printer.ScaleWidth - MarginRight + _
MarginText, 0 + MarginTop - MarginText), RGB(197, 197, 197)
End If
If BorderBottom Then
Printer.Line (0 + MarginLeft - MarginText, _
Printer.ScaleHeight - MarginBottom + MarginText) _
-(Printer.ScaleWidth - MarginRight + MarginText, _
Printer.ScaleHeight - MarginBottom + MarginText), _
RGB(128, 128, 128)
End If
If BorderLeft Then
Printer.Line (0 + MarginLeft - MarginText, 0 + MarginTop - _
MarginText) -(0 + MarginLeft - MarginText, _
Printer.ScaleHeight - MarginBottom + MarginText), _
RGB(197, 197, 197)
End If
If BorderRight Then
Printer.Line (Printer.ScaleWidth - MarginLeft + MarginText, _
0 + MarginTop - MarginText) -(Printer.ScaleWidth - _
MarginLeft + MarginText, Printer.ScaleHeight - _
MarginBottom + MarginText), RGB(128, 128, 128)
End If
If CountPages Then
If Not BorderBottom Then
Printer.CurrentY = (Printer.ScaleHeight - MarginBottom + _
MarginText)
Printer.CurrentX = (Printer.ScaleWidth - _
Printer.TextWidth(".: Flipidus Note 2.1 Ausdruck " & _
" " & frmNote.Label22.Caption & " " & _
frmNote.Label7.Caption & " Seite " & _
Str(NumPages) & " :.")) / 2
Printer.Print ".: Flipidus Note 2.1 Ausdruck " & _
frmNote.Label22.Caption & " " & _
frmNote.Label7.Caption & " Seite " & _
Str(NumPages) & " :."
Else
Printer.CurrentY = (Printer.ScaleHeight - MarginBottom + _
MarginText + 0.1)
Printer.CurrentX = (Printer.ScaleWidth - _
Printer.TextWidth(".: Flipidus Note 2.1 Ausdruck " & _
" " & frmNote.Label22.Caption & " " & _
frmNote.Label7.Caption & " Seite " & _
Str(NumPages) & " :.")) / 2
Printer.Print ".: Flipidus Note 2.1 Ausdruck " & _
frmNote.Label22.Caption & " " & _
frmNote.Label7.Caption & " Seite " & _
Str(NumPages) & " :."
End If
End If
Printer.CurrentY = MarginTop
Printer.CurrentX = MarginLeft
End Sub
Private Sub PrintCentered(Expression As String, ByVal Height As Single)
If Printer.CurrentY + Printer.TextHeight(Expression) >= _
Printer.ScaleHeight - MarginBottom Then
Call NextPage(True)
Height = Printer.CurrentY
End If
' hiermit wird der Text auf der X-Achse (Nicht(!!!) _
"Kooradinate") zentriert
' Schema: Seitenbreite - Textbreite / 2
' Nein: (Seitenbreite - Textbreite) / 2 bzw. _
(Distributiv-Gesetz): Seitenbreite / 2 - Textbreite / 2
Printer.CurrentX = (Printer.ScaleWidth - _
Printer.TextWidth(Expression)) / 2
Printer.CurrentY = Height
Printer.Print Expression
End Sub
Private Sub PrintRight(Expression As String, ByVal Height As Single)
If Printer.CurrentY + Printer.TextHeight(Expression) >= _
Printer.ScaleHeight - MarginBottom Then
Call NextPage(True)
Height = Printer.CurrentY
End If
' hiermit wird der Text rechtsbündig ausgegeben
' Schema: Seitenbreite - Textbreite - AbstandvonRechts
Printer.CurrentX = (Printer.ScaleWidth - _
Printer.TextWidth(Expression) - MarginRight)
Printer.CurrentY = Height
Printer.Print Expression
End Sub
Private Sub PrintLeft(Expression As String, ByVal Height As Single)
If Printer.CurrentY + Printer.TextHeight(Expression) >= _
Printer.ScaleHeight - MarginBottom Then
Call NextPage(True)
Height = Printer.CurrentY
End If
' hiermit wird der Text linksbündig ausgegeben
' Schema: 0 + AbstandvonLinks
Printer.CurrentX = (0 + MarginLeft)
Printer.CurrentY = Height
Printer.Print Expression
End Sub
Sub ListPrinterCombo()
Dim X As Integer
Dim Y As Integer
Dim Printername As String
Y = -1
'Die Combobox mit vorhandenen Druckern füllen
For X = 0 To Printers.Count - 1
Printername = Printers(X).DeviceName
frmPrint.Combo1.AddItem Printername
'Mit dem derzeit eingestellten vergleichen
If Printername = Printer.DeviceName Then
Y = X
End If
Next X
frmPrint.Combo1.ListIndex = Y
End Sub
aufegrufen wird dies mitCall Drucken.PrintText(frmNote.Text1.Text)
MFG: Philipp Kiric