# PrintForm - Problem..



## VBMichi (26. April 2006)

Servus.

Habe seit langem folgendes Problem:

Ich will das meine Form (mit Labels usw. bestückt - sieht aus wie ein fertiges Dokument) ausgedruckt wird.
Alles kein Problem mit dem PrintForm Befehl. Nur leider verkleinert VB alles sofort und automatisch, da die Form nicht die Größe eines DinA4 Blattes annehmen kann - also kann sie auch kein ganzes DinA4 Blatt füllen, sondern nur ca. 3/4 davon.

Weiß jemand wie ich weiterkommen könnte?

Vielen Dank,

Gruß Michi


----------



## wincnc (27. April 2006)

Hallo, versuch´s mal hiermit:

```
Private Declare Sub keybd_event Lib "user32" ( _
  ByVal bVk As Byte, _
  ByVal bScan As Byte, _
  ByVal dwFlags As Long, _
  ByVal dwExtraInfo As Long)
  
Private Enum Ausrichtung
 Hochformat = 1
 Querformat = 2
End Enum

Private Sub FormToPrinter(Optional ByVal bActiveWindow As Boolean = True, Optional Orientation As Ausrichtung = Hochformat)

  Const KEYEVENTF_KEYUP = &H2
  Const VK_MENU = &H12
  Const VK_SNAPSHOT = &H2C

  If bActiveWindow Then keybd_event VK_MENU, 0, 0, 0
  keybd_event VK_SNAPSHOT, 0, 0, 0
  keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
  If bActiveWindow Then keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
  DoEvents
  
  Printer.Orientation = Orientation
  Printer.PaintPicture Clipboard.GetData, 0, 0, Printer.ScaleWidth, Printer.ScaleHeight
  Printer.EndDoc
End Sub

Private Sub Command1_Click()
 FormToPrinter True, Querformat
End Sub
```


----------



## VBMichi (27. April 2006)

Hi wincnc.

Vielen Dank für deine Antwort, das hat mich schonma einen rieeeeßen Schritt weitergebracht, weils funktioniert!!  

Aber noch ne Frage:

Wenn ich die Form JETZT ausdrucke, dann druckt er sie zwar super DinA4 aus, aber leider ist der "Rand" dabei - sprich oben die MenüLeiste mit minimieren, vergrößern und dem Schließezeiche + der Name der Form und so.
Gäbe es ne Möglichkeit das zu unterdrücken oder einfach "wegzuschneiden" ?!
Weil eine Abrechnung mit Schaltflächen außenrum is nicht so praktisch !! *G*

Aber super hey, dank dir!

Gruß,
Michi


----------



## wincnc (28. April 2006)

Hallo, ja das geht.

```
Printer.PaintPicture Clipboard.GetData, 0, 0, Printer.ScaleWidth, Printer.ScaleHeight, 60, 450, Me.Width - 120, Me.Height - 550
```
Bei den Werten musst ein wenig probieren.


----------



## VBMichi (28. April 2006)

Cool super, funktioniert.

Vielen Dank für deine Hilfe !  

*Lob*


----------



## VBMichi (29. April 2006)

So, jetzt muss ich leider nochmal was nachfragen  

Alles was du mit gesagt hat funktioniert perfekt. Es gibt nur (einen für mich neuen) bedeutenden Unterschied.
Auf der Form die dann (wenn man auf den sich dort befindeten Button klickt) ausgedruckt wird, wir der "Druck-Button" auf .Visible = False gesetzt bevor ich FormToPrinter True mache.
Er verschwindet dann auf der Form und der Drucken geht an.
Aber irgendwie druckt er die Buttons obwohl sie Invisible sind (mit Label's das gleich) trotzdem aus. Warum?
Gibt es ein Befehl um die Buttons zu löschen oder einfach auch für den Drucker unsichtbar zu machen

Gruß,
Michi


----------



## schachmat (29. April 2006)

Da musst du davor noch DoEvents machen, damit er das noch verarbeitet vor dem schicken an den Drucker.


----------



## VBMichi (29. April 2006)

Wie sieht denn son' DoEvent aus?! (Programmiere erste 9 Monate :suspekt: )

Do & Loop wird das nicht sein, oder?


----------



## schachmat (29. April 2006)

ich glaub das is ne Funktion, die einfach DoEvents() heißt 

Probier halt mal aus... kannst natürlich für eine genauere Beschreibung auch in MSDN nach DoEvents suchen...


----------



## VBMichi (29. April 2006)

Hab jetzt hier gesucht und gegoogled, aber verstande noch immer nix  

Irgend nen Bsp für son DoEvent wäre nicht schlecht, damit ich mir was drunter vorstellen kann.
Gruß,
Michi


----------



## wincnc (29. April 2006)

Hallo, das geht ganz einfach.

```
Private Sub Command1_Click()
  Command1.Visible = False
  DoEvents
  FormToPrinter True, Hochformat
  Command1.Visible = True
End Sub
```


----------



## VBMichi (29. April 2006)

Ah danke wincnc!

Hatte es ganz genauso, nur ohne DoEvent  

Gruß,
Michi


----------

