Tipp 0537 Drucken mit Vorschau
Autor/Einsender:
Datum:
  Lothar Kriegerow
22.09.2007
Entwicklungsumgebung:   VB 6
Wer den Reportgenerator von ACCESS kennt, wird in VB vergeblich nach einer Möglichkeit suchen, Formulare ordentlich in einer Vorschau anzuzeigen und ggf. auszudrucken. Zwar besteht die Möglichkeit, den mitgelieferten DataReport zu verwenden, aber wer ernsthafte Anwendungen schreiben möchte, wird mit diesem Designer schon bald an die Grenzen stoßen.
Die nachfolgenden Beschreibungen setzen voraus, dass der Anwender mit einer Datenbank arbeitet. Dabei spielt es keine Rolle, ob es sich um eine ACCESS-, MySQL- oder MS-SQL Datenbank handelt. 
Im Mehrplatzbetrieb muss die zur Darstellung verwendete Tabelle temporär für jede Connection für sich erfolgen. Dieses erreicht man z.B. bei einer MS-SQL Datenbank mit der vorangestellten Raute (Select * From #MeineTabelle...). Somit ist es möglich, dass X Anwender gleichzeitig Formulare aufrufen können, ohne sich gegenseitig zu beeinflussen. Dieses Beispiel bezieht sich jedoch auf den Einplatzbetrieb.
Beim Aufruf der Vorschau wird das Formular vordefiniert. Rand, Fußposition, Zeilenanzahl Plattformat u.s.w. Sinnvoll ist es und wurde in dem Beispiel so praktiziert, einen Formulardesigner zu schreiben, mit dem man die einzelnen Werte der jeweiligen Formulare benutzerbezogen anpassen kann. Gibt es also so eine Anpassung zu einem Formular, werden diese Daten verwendet. Andernfalls gelten die Voreinstellungen. Mit den "Varianten" können die einzelnen Formularvarianten festgelegt werden. Der Sinn geht gut aus dem hervor und wird nicht näher erläutert.
Die Tabelle, die das Ergebnis darstellen soll, muss zwingend eine ID-Spalte besitzen, welche eine fortlaufende Nummerierung gewährleisten muss. Diese dient dem Programm zur späteren Orientierung, also der Erkennung der Zeilen und somit der Seiten.
Um die Vorschau zu realisieren, wird eine PictureBox verwendet, in die alle zur Ausgabe relevanten Daten gezeichnet werden.
Auch eine Auswahl des Druckers, Zoom, Anzahl der Zeilen sowie ein Ausdruck einzelner Seiten ist möglich. So erkennt das Beispiel durch die Eingabe 4-6; 8 im Seitenfeld auch, dass es die Seiten 4,5,6 und 8 drucken soll.
Natürlich soll dieses Beispiel lediglich zeigen, wie eine Druckvorschau mit VB realisiert werden kann, und lässt sich natürlich beliebig erweitern, wie z.B. mit einer Scrollrad-Unterstützung usw.
Code im Codebereich des Moduls
 
Option Explicit

Type FormularDaten
  KopfVar As Integer
  Variante As Integer
  FussVar As Integer
  Zeilen As Integer
  Ausrichtung As Integer
End Type

Public Fr As FormularDaten
Public SQL As String

Public Zoom As Single
Public RandO As Single
Public RandU As Single
Public RandL As Single
Public RandR As Single
Public CON As ADODB.Connection
Public Rs As New ADODB.Recordset
Public FussPos As Single
Public TB As String

Sub MDB()
  ' Mit einer Beispieldatenbank verbinden
  Set CON = New ADODB.Connection

  With CON
    .CursorLocation = adUseClient
    .Mode = adModeShareDenyNone
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .Properties("Data Source") = App.Path + "\Demo.mdb"
    .Properties("Jet OLEDB:Database Password") = "DemoDB"
    .Open
  End With
End Sub
 
Code im Codebereich der Form frmDruckDemo
 
Option Explicit

Private Sub Command1_Click()
  Dim Data As SYSTEMTIME

   'MonthView-Daten an die Struktur übergeben
  With Data
    .wDay = MonthView1.Day
    .wMonth = MonthView1.Month
    .wYear = MonthView1.Year
  End With

  SetToday MonthView1.hwnd, Data
  Command1.Enabled = False
'   System-Datum setzen
'  Date = MonthView1.Value
End Sub

Private Sub Command2_Click()
  Unload Me
End Sub

Private Sub Form_Load()
   ' Aktuelles Datum setzen
  MonthView1.Value = Date
End Sub

Private Sub Form_Unload(Cancel As Integer)
  End
End Sub

Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
   'MonthView Click-Bug umgehen
  With Command1
     .Enabled = True
     .SetFocus
  End With
End Sub
 
Hinweis
Aufgrund des Umfangs wurde der Quellcode, an einigen Stellen gekürzt, um die Übersicht zu wahren, Das Downloadprojekt ist an den wichtigsten Stellen kommentiert. Um diesen Tipp ausführen zu können, muss die Microsoft ActiveX Data Objects 2.x Library in das Projekt eingebunden werden.

Windows-Version
95
98
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (32,8 kB) Downloads bisher: [ 642 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

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

Seite empfehlen Bug-Report
Letzte Aktualisierung: Samstag, 24. September 2011