20. Apr 2024, 03:50
VB-fun.de - Beitragsübersicht zum VB-/VBA-Forum-Archiv 0411
  VB6: Druck-Prozedur macht keine autom. Zeilenumbrüche
 Von Flipidus
 eMail
 Am 05. August 2008 um 13:10:29
 Frage 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 mit
Call Drucken.PrintText(frmNote.Text1.Text)
MFG: Philipp Kiric
[ VB-/VBA-Forum | Archiv 0411 | Archiv-Übersicht ]
 Antworten
VB6: Druck-Prozedur macht keine autom. Zeilenumbrüche - Flipidus 05. August 2008 um 13:10:29
Re: Druck-Prozedur macht keine autom. Zeilenumbrüche - LotharK 05. August 2008 um 15:04:45
Re: Druck-Prozedur macht keine autom. Zeilenumbrüche - Flipidus 06. August 2008 um 12:18:21

Zum Seitenanfang

Startseite | VB-/VBA-Tipps | Projekte | Tutorials | API-Referenz | Komponenten | Bücherecke | Gewinnspiele | VB-/VBA-Forum | DirectX | DirectX-Forum | VB.Net | VB.Net-Forum | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum