Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB 5/6 0064: ein Control ausdrucken, PrintControl

 von 

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Drucker
  • Fenster
  • Steuerelemente

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
PrintControl, PrintForm, Drucken

Damit er übernommen werden kann, müssen noch Änderungen daran vorgenommen werden. Sofern Sie der Autor sind, können Sie sich anmelden, um die Liste einzusehen.

Der Vorschlag wurde erstellt am: 25.02.2008 15:25.
Die letzte Aktualisierung erfolgte am 27.08.2007 13:46.

Zurück zur Übersicht

Beschreibung  

Ihr kennt vielleicht die Funktion PrintForm, die jedes Formular hat, um ein VB-Formular im eigenen VB-Projekt ganz easy auf einem Drucker auszudrucken. Wenn man aber nicht das ganze Formular sondern nur Teile davon, z.B. eine PictureBox, oder einen Frame ausgedruckt haben will, was macht man dann?
Lösungsvorschlag:
man macht sich im Projekt ein Dummy-Formular, nennen wir es:
* FrmPrintControl
bei diesem Formular setzt man im Propertyeditor die zur Laufzeit schreibgeschütze Eigenschaft Borderstyle auf:
* Borderstyle: 0 - kein

Jetzt muß man nur noch dafür sorgen daß...
a) das Control auf das Formular wandert
b) das Formular in der Größe an das Control angepaßt wird
...dann kann man mit der Funktion PrintForm des Formulars FrmPrintControl das ganze Formular ausdrucken, auf dem dann ja nur das jeweilige Control sichtbar ist.
Zum Schluß das Control wieder an seinen ursprünglichen Platz zurücklegen
zu a) da hilft die API-Funktion SetParent

Siehe auch Tipp 0084: "Fenster oder Clientbereich von Fenstern kopieren"

Schwierigkeitsgrad

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

SetParent

Download:

Download des Beispielprojektes [4,34 KB]

' Dieser Source 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: Beschriftungsfeld "Label1" auf Panel
' Steuerelement: Kombinationsliste "Combo1" auf Panel
' Steuerelement: Schaltfläche "Command2" auf Frame1
' Steuerelement: Bildfeld-Steuerelement "Picture2" auf Frame1
' Steuerelement: Bildfeld-Steuerelement "Panel"
' Steuerelement: Schaltfläche "Command1" auf Panel
' Steuerelement: Rahmensteuerelement "Frame1"
' Steuerelement: Textfeld "Text2" auf Frame1
' Steuerelement: Kontrollkästchen-Steuerelement "Check1" auf Panel
' Steuerelement: Textfeld "Text1" auf Panel
' Steuerelement: Optionsfeld-Steuerelement "Option1" auf Panel
' Steuerelement: Listen-Steuerelement "List1" auf Panel

Option Explicit

Private Sub Command1_Click()

    Printer.Orientation = vbPRORLandscape
    FrmPrintControl.PrintControl Panel

End Sub

Private Sub Command2_Click()

    Printer.Orientation = vbPRORPortrait
    FrmPrintControl.PrintControl Frame1

End Sub

' ---------- Ende Formular "Form1" alias Form1.frm  ----------

' --- Anfang Formular "FrmPrintControl" alias FrmPrintControl.frm  ---

Option Explicit

Private Declare Function SetParent Lib "user32.dll" ( _
                         ByVal hWndChild As Long, _
                         ByVal hWndNewParent As Long) As Long

Public Sub PrintControl(CTLwHwnd As Control)

    ' CTLwHwnd: ein Control mit einem hwnd

    Dim oldL As Single: oldL = CTLwHwnd.Left
    Dim oldT As Single: oldT = CTLwHwnd.Top

    With CTLwHwnd

        ' das Control übertragen, das alte Fensterhandle sichern
        Dim oldHwnd As Long: oldHwnd = SetParent(.hWnd, Me.hWnd)

        ' das Control nach linksoben verschieben
        Call CTLwHwnd.Move(0, 0)

        ' die Größe des Fensters anpassen
        Call Me.Move(.Left, .Top, .Width, .Height)

        ' jetzt ausdrucken
        Me.PrintForm

        ' Das Control wieder an den ursprünglichen Platz zurücklegen
        Call SetParent(.hWnd, oldHwnd)
        Call CTLwHwnd.Move(oldL, oldT)

    End With

    ' last not least das Formular wieder entladen
    Unload Me

End Sub

' --- Ende Formular "FrmPrintControl" alias FrmPrintControl.frm  ---

' -------------- Ende Projektdatei Projekt1.vbp --------------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.