Tipp-Upload: VB 5/6 0064: ein Control ausdrucken, PrintControl
von OlimilO
Ü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.
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 |
Verwendete API-Aufrufe: SetParent |
Download: |
' 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.