Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0648: Links- und rechtsbündig sowie zentriert drucken

 von 

Beschreibung 

Dieser Tipp zeigt, wie man Text links- und rechtsbündig sowie zentriert drucken kann. Dabei wird das Sprachkonstrukt "print" verwendet, welches es erlaubt, die Funktion auch an Pictureboxen zu testen.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [2,24 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 Projekt1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Bildfeld-Steuerelement "Picture1"
' Steuerelement: Schaltfläche "Command1"


' ---------------------------------------------------------------
'  wie kann ich linksbündig, rechtsbündig oder zentriert drucken?
'
'  das AusgabeObject prnObj kann eine Form, eine Picturebox oder
'  der Printer sein
' ---------------------------------------------------------------

Option Explicit

' Linksbündig drucken
Public Sub PrintLeft(prnObj As Object, sString As String, _
    Optional X As Single = -1, Optional Y As Single = -1, _
    Optional NewLine As Boolean = False)
    
    Dim x1 As Single, y1 As Single
    
    ' Position speichern
    x1 = prnObj.CurrentX
    y1 = prnObj.CurrentY
      
    ' Links
    If X <> -1 Then
        prnObj.CurrentX = X
    End If
      
    If Y <> -1 Then
        prnObj.CurrentY = Y
    End If
      
    ' Drucken
    prnObj.Print sString
      
    ' Position zurücksetzen
    If NewLine = False Then
        prnObj.CurrentX = x1
        prnObj.CurrentY = y1
    End If
End Sub

' Rechtsbündig drucken
Public Sub PrintRight(prnObj As Object, sString As String, _
    Optional X As Single = -1, Optional Y As Single = -1, _
    Optional NewLine As Boolean = False)
    
    Dim x1 As Single, y1 As Single
    
    ' Position speichern
    x1 = prnObj.CurrentX
    y1 = prnObj.CurrentY
    
    ' Links
    If X <> -1 Then
        prnObj.CurrentX = X
    End If
    prnObj.CurrentX = prnObj.CurrentX - prnObj.TextWidth(sString)
    
    If Y <> -1 Then
        prnObj.CurrentY = Y
    End If
    
    ' Drucken
    prnObj.Print sString
    
    ' Position zurücksetzen
    If NewLine = False Then
        prnObj.CurrentX = x1
        prnObj.CurrentY = y1
    End If
End Sub

' Zentriert drucken
Public Sub PrintCenter(prnObj As Object, sString As String, _
    Optional X As Single = -1, Optional Y As Single = -1, _
    Optional NewLine As Boolean = False)
    
    Dim x1 As Single, y1 As Single
    
    ' Position speichern
    x1 = prnObj.CurrentX
    y1 = prnObj.CurrentY
    
    ' links
    If X <> -1 Then
        prnObj.CurrentX = X
    End If
    prnObj.CurrentX = prnObj.CurrentX - (prnObj.TextWidth(sString) / 2)
    
    If Y <> -1 Then
        prnObj.CurrentY = Y
    End If
    
    ' Drucken
    prnObj.Print sString
    
    ' Position laden
    If NewLine = False Then
        prnObj.CurrentX = x1
        prnObj.CurrentY = y1
    End If
End Sub

Private Sub Command1_Click()
    Dim i As Long
    Dim prnObj As Object
    
    Set prnObj = Picture1
'    Set prnObj = Printer
    
    If Not TypeOf prnObj Is Printer Then
        prnObj.Cls
    End If
    
    prnObj.CurrentY = 100
    For i = 1 To 15
        PrintLeft prnObj, String(i, "8"), 100
        PrintCenter prnObj, String(i, "8"), 2500
        PrintRight prnObj, String(i, "8"), 5000, , True
    Next i
    
    If TypeOf prnObj Is Printer Then
        prnObj.EndDoc
    End If
    
    Set prnObj = Nothing
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Projekt1.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 1 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 Erwin am 28.01.2009 um 23:21

Ich arbeite unter VB6 und habe mir erlaubt, Ihre Routinen für meine Druckprogramme zu verwenden. Dabei bin ich zum Schluß gekommen alle drei zu einer Routine zu vereinen. Mein Ergebnis möchte ich Ihnen nicht vorenthalten. Sie sehen Sie nachfolgend mit sämtlichen Erweiterungen:

'*** Druckroutine zwecks Ausrichtung von Text in Formularen
'
' 0 = Ausrichtung "LINKS"
' 1 = Ausrichtung "RECHTS"
' 2 = Ausrichtung "ZENTRIERT"
'
'NB: Voreinstellung für Scalemode ist 1 (Twips)
'1 Cm = 567 Twips --- 1 Zoll = 1440 Twips
'
Public Sub sPrDruck(sText, Ausrichtung, Optional X As Single = -1, Optional Y As Single = -1, _
Optional NewLine As Boolean = False, Optional FBold As Boolean = False, _
Optional FItalic As Boolean = False, Optional FSize As Single = 10)

Dim X1 As Single, Y1 As Single

'Position speichern
X1 = PRN.CurrentX
Y1 = PRN.CurrentY
PRN.FontBold = FBold
PRN.FontSize = FSize
PRN.FontItalic = FItalic

'Links
If X <> -1 Then
PRN.CurrentX = X
End If

If Y <> -1 Then
PRN.CurrentY = Y
End If

'Ausrichtung ==> 1 = Rechts; 0 = Links; 2 = Zentriert
Select Case Ausrichtung
Case 0
Case 1
PRN.CurrentX = PRN.CurrentX - PRN.TextWidth(sText)
Case 2
PRN.CurrentX = PRN.CurrentX - (PRN.TextWidth(sText) / 2)
Case Else
End Select

'Drucken
PRN.Print sText

If NewLine = False Then
PRN.CurrentX = X1
PRN.CurrentY = Y1
End If

End Sub

Möchte mich bei Ihnen auf diese Weise ganz herzlich für Ihren Tip bedanken. Sie können diese geänderte Routine gerne öffentlich zur Verfügung stellen, wenn Sie diese für gut empfinen.
Nochmals herzlichen Dank und freundliche Grüße
Erwin