vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB4, VB5, VB601.04.02
Drucken mit Seitenvorschau

Ein Beispiel, das zeigt, wie sich ein Ausdruck über das Printer-Objekt zunächst in einer Druckvorschau am Bildschirm anzeigen lässt.

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  1.814 
http://www.tools4vb.de/System:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

Mit dem VB-eigenen Printer-Objekt lässt sich allerhand ausdrucken Aber leider immer direkt auf den Drucker. Oftmals wünscht man sich aber einen Ausdruck in eine Echtseitenvorschau, so daß man das Ergebnis zuvor am Bildschirm betrachten kann, ehe man das ganze dann auf den Drucker ausgibt. Wie man eine Seitenvorschau realisiert, zeigen wir Ihnen hier - in unserem Extra-Tipp.

Anforderungen
Alles, was wir für den "Ausdruck" in ein Seitenvorschau-Fenster benötigen, sind zwei PictureBox-Objekte, sowie eine zusätzliche API-Funktion (StretchBlt). Die PictureBox selbst verfügt über alle Methoden und Anweisungen des Printer-Objekts, so dass sich die Druckdaten (Text, Linien und Bilder) ohne großen Code-Änderungen und -Anpassungen entweder in die PictureBox oder aber auf das Printer-Objekt ausgeben lassen.

Einzig die Anweisung EndDoc, welche den Druckauftrag abschließt, darf nur ausgeführt werden, wenn der Ausdruck tatsächlich auf den Drucker erfolgt.

Einschänrkung
Die hier vorgestellte PrintPreview-Prozedur berücksichtigt keine mehrseitigen Ausdrucke.

Das Layout
Erstellen Sie ein neues Projekt und plazieren eine Schaltfläche auf die Form1. Nennen Sie die Schaltfläche cmdPreview. Beim Klicken auf den Button wird ein neues Fenster mit der Druck-Seitenvorschau geöffnet. Fügen Sie dem Projekt also noch eine weitere Form hinzu und nennen Sie diese frmPreview. Plazieren Sie auf die Form zwei PictureBox-Controls (Picture1 und Picture2). Die Größe der ersten PictureBox bestimmt hierbei die Größe der Seitenvorschau. Passen Sie die Größe demnach entsprechend Ihren Vorstellungen an. Achten Sie hierbei auf ein einigermaßen exaktes Größenverhältnis von Höhe x Breite, z.B. Height=7050, Width=5005. Wenn Sie möchten plazieren Sie noch ein Shape-Control auf die Form - als Schatten.

Fügen Sie nachfolgenden Code in den Codeteil der Form (frmPreview):

Option Explicit
' Deklaratione der benötigten API-Funktion
Private Declare Function StretchBlt Lib "gdi32" ( _
  ByVal hdc As Long, _
  ByVal x As Long, _
  ByVal y As Long, _
  ByVal nWidth As Long, _
  ByVal nHeight As Long, _
  ByVal hSrcDC As Long, _
  ByVal xSrc As Long, _
  ByVal ySrc As Long, _
  ByVal nSrcWidth As Long, _
  ByVal nSrcHeight As Long, _
  ByVal dwRop As Long) As Long
Private Sub Form_Load()
  ' Vorschau vorbereiten
  Picture1.AutoRedraw = True
 
  With Picture2
    .AutoRedraw = True
    .Width = Printer.Width
    .Height = Printer.Height
 
    ' aus den sichtbaren Bereich schieben
    .Move -Width, 0
  End With
End Sub
Public Sub ShowPreview()
  ' Vorschau neu anzeigen
  With Picture1
    StretchBlt .hdc, 0, 0, .ScaleWidth, .ScaleHeight, _
      Picture2.hdc, 0, 0, _
      Picture2.ScaleWidth, _
      Picture2.ScaleHeight, vbSrcCopy
  End With
End Sub

Die Prozedur "PrintPreview"
Der Kern der Druckvorschau-Funktion bildet die Prozedur PrintPreview. Die Prozedur erwartet als Parameter entweder das Printer-Objekt (Ausdruck auf den Drucker) oder das Seitenvorschaufenster (frmPreview).

Private Sub PrintPreview(oAusgabe As Object)
  ' Ausdruck (entweder in Seitenvorschaufenster
  ' oder auf den Drucker)
  Dim y As Long
  Dim prnObject As Object
  Dim bPreview As Boolean
 
  ' Druckvorschau?
  bPreview = (TypeOf oAusgabe Is Form)
 
  If bPreview Then
    Set prnObject = oAusgabe.Picture2
  Else
    Set prnObject = Printer
  End If
 
  With prnObject
    ' ein wenig Text drucken
    .Font.Name = "Arial"
    .Font.Size = 16
    .Font.Bold = True
    prnObject.Print "vb@rchiv"
    .Font.Size = 14
    prnObject.Print "Das grpße Visual Basic Archiv"
    .Font.Size = 10
    .Font.Underline = True
    .ForeColor = vbBlue
    prnObject.Print "http://www.vbarchiv.de"
    .Font.Underline = False
    .ForeColor = vbBlack
    .Font.Bold = False
 
    ' eine Linie
    y = .CurrentY + 60
    prnObject.Line (0, y)-(.Width, y)
    .CurrentY = y + 210
    .CurrentX = 0
 
    ' wieder ein bisschen Text
    .Font.Bold = True
    .Font.Size = 14
    prnObject.Print "Drucken mit Seitenvorschau"
    prnObject.Print
    .Font.Bold = False
    .Font.Size = 11
    prnObject.Print "Mit dem VB-eigenen Printer-Objekt lässt sich allerhand ausdrucken ;-)"
    prnObject.Print "Aber leider immer direkt auf den Drucker. Oftmals wünscht man sich "
    prnObject.Print "aber einen Ausdruck in eine Echtseitenvorschau, so daß man das "
    prnObject.Print "Ergebnis zuvor am Bildschirm betrachten kann, ehe man das ganze "
    prnObject.Print "dann auf den Drucker ausgibt."
    prnObject.Print ""
    prnObject.Print "Wie man eine Seitenvorschau realisiert, zeigen wir Ihnen hier - in "
    prnObject.Print "unserem Extra-Tipp."
 
    If bPreview Then
      ' Druckvorschau erstellen .....
      oAusgabe.ShowPreview
    Else
      ' Druckauftrag beenden
      prnObject.EndDoc
    End If
  End With
End Sub

Was fehlt noch?
Klar - der Aufruf der Druckfunktion aus der Hauptform heraus.

Private Sub cmdPrint_Click()
  ' Drucken in Druckvorschau
  Load frmPreview
  PrintPreview frmPreview
  frmPreview.Show 1
  Unload frmPreview
End Sub

Zoomfunktion und Druckfunktion
Das Beispielprojekt enthält zusätzlich eine Zoomfunktion der Seitenvorschau, mit der sich die Darstellung vergrößern und verkleiner lässt. Außerdem lässt sich der Ausdruck auch direkt aus der Seitenvorschau heraus starten.