PrintForm et visual basic 2012 express

BORISDETOURS 16 Messages postés dimanche 22 octobre 2017Date d'inscription 10 novembre 2017 Dernière intervention - 22 oct. 2017 à 11:07 - Dernière réponse : BORISDETOURS 16 Messages postés dimanche 22 octobre 2017Date d'inscription 10 novembre 2017 Dernière intervention
- 26 oct. 2017 à 11:49
Bonjour à tous
J'essai vainement d'obtenir un code pour imprimer mes forms, mais rien ne marche.
Il semble que pour obtenir il faut installer le contrôle PrintForm mais je ne trouve pas la solution. J'ai consulté toutes les pages trouvées sur MSDN mais les solutions sont ou trop complexes ou ne donnent rien.
Il semble que je doive passer par le PowerPacks.PrintForm, je l'ai téléchargé mais impossible de le lier avec VB 2012 Express.
Quelqu'un peut-il m'indiquer un code ou me donner la page ou tout est expliqué clairement! Merci Microsoft car le Print Form de VB6 était bien plus simple.
Le cas échéant je recherche un programmeur qui puisse me finaliser mon programme ou en réaliser un suivant un cahier des charges.
Merci.
Afficher la suite 

14 réponses

Répondre au sujet
vb95 1500 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 18 avril 2018 Dernière intervention - 22 oct. 2017 à 11:15
0
Utile
1
bonjour
A tester

X-H-1-f. Imprime le formulaire en cours

Exemple fournit par Microsoft.
La routine CaptureScreen capture l'image du formulaire en cours et la met dans memoryImage. puis memoryImage est passé dans l'objet graphique e qui est imprimé.
 
Private Declare Function BitBlt Lib "gdi32.dll" Alias "BitBlt" (ByVal _
hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As _
Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal _
hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, _
ByVal dwRop As System.Int32) As Long
Dim memoryImage As Bitmap
Private Sub CaptureScreen()
Dim mygraphics As Graphics = Me.CreateGraphics()
Dim s As Size = Me.Size
memoryImage = New Bitmap(s.Width, s.Height, mygraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
Dim dc1 As IntPtr = mygraphics.GetHdc
Dim dc2 As IntPtr = memoryGraphics.GetHdc
BitBlt(dc2, 0, 0, Me.ClientRectangle.Width, _
Me.ClientRectangle.Height, dc1, 0, 0, 13369376)
mygraphics.ReleaseHdc(dc1)
memoryGraphics.ReleaseHdc(dc2)
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
PrintDocument1.PrintPage
e.Graphics.DrawImage(memoryImage, 0, 0)
End Sub
Private Sub PrintButton_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles PrintButton.Click
CaptureScreen()
PrintDocument1.Print()
End Sub


Exemple tiré d'un cours sur VB Net disponible ici : http://plasserre.developpez.com/cours/vb-net/e
BORISDETOURS 16 Messages postés dimanche 22 octobre 2017Date d'inscription 10 novembre 2017 Dernière intervention - 23 oct. 2017 à 10:13
Merci de votre réponse, mais le code génère des erreurs que j'ai essayé de corriger, résultat j'imprime bien mais la page est blanche!
J'avais déjà expérimenté ce code des cours de PLASSERRE et bien d'autres mais il me semble qu'il me faille absolument le contrôle PrintForm que je ne peut obtenir qu'en passant par le PowerPack.Printing.PrintForm.
que je ne parvient pas à implanter dans VB Express.
J'attends d'autres résultats!
Commenter la réponse de vb95
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 23 oct. 2017 à 12:02
vb95 1500 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 18 avril 2018 Dernière intervention > BORISDETOURS 16 Messages postés dimanche 22 octobre 2017Date d'inscription 10 novembre 2017 Dernière intervention - 24 oct. 2017 à 19:10
Bonjour !
J'ai repris ton code !
il y a 2 subs PrintDocument1_PrintPage

La seule à garder est celle de la ligne 39 ( celle qui a à la fin Handles PrintDocument1.PrintPage avec le code compris dans cette sub )



Public Class Form1

Private Sub Form1_Load(sender As System.Object, e As_ System.EventArgs) Handles MyBase.Load
End Sub

Private Declare Function BitBlt Lib "gdi32.dll" Alias "BitBlt" (ByVal _
hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As _
Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal _
hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, _
ByVal dwRop As System.Int32) As Long
Dim memoryImage As Bitmap

Private Sub CaptureScreen()
Dim mygraphics As Graphics = Me.CreateGraphics()
Dim s As Size = Me.Size
memoryImage = New Bitmap(s.Width, s.Height, mygraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage_(memoryImage)
Dim dc1 As IntPtr = mygraphics.GetHdc
Dim dc2 As IntPtr = memoryGraphics.GetHdc
BitBlt(dc2, 0, 0, Me.ClientRectangle.Width, _
Me.ClientRectangle.Height, dc1, 0, 0, 13369376)
mygraphics.ReleaseHdc(dc1)
memoryGraphics.ReleaseHdc(dc2)
End Sub

' A supprimer cette sub
'Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, _ ByVal e As System.Drawing.Printing.PrintPageEventArgs)
'e.Graphics.DrawImage(memoryImage, 0, 0)
'End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

CaptureScreen()
PrintDocument1.Print()

End Sub

Private Sub PrintDocument1_PrintPage_1(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles
PrintDocument1.PrintPage

e.Graphics.DrawImage(memoryImage, 0, 0) ' à rajouter au cas où

End Sub
End Class

BORISDETOURS > vb95 1500 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 18 avril 2018 Dernière intervention - 24 oct. 2017 à 19:16
Merci de ta rapidité, je vois ça demain matin
Bonne soirée
BORISDETOURS 16 Messages postés dimanche 22 octobre 2017Date d'inscription 10 novembre 2017 Dernière intervention > vb95 1500 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 18 avril 2018 Dernière intervention - 26 oct. 2017 à 11:49
Bonjour vb95,
A force de fouiner sur le web, j'ai enfin trouvé comment ajouter PrintForm dans les outils, je viens de le tester et ça a l'air de marcher.
Je vais avancer et je te tiendrais au courant.
Encore mille merci de ton aide.
BORISDETOURS
BORISDETOURS 16 Messages postés dimanche 22 octobre 2017Date d'inscription 10 novembre 2017 Dernière intervention - 25 oct. 2017 à 09:31
Même résultat!
Je te joins le code corrigé; Le PrintDocument en + avait été rajouté en vitesse suite à ta dernière remarque.
Je te remercie de tes efforts.
VB95 > BORISDETOURS 16 Messages postés dimanche 22 octobre 2017Date d'inscription 10 novembre 2017 Dernière intervention - 25 oct. 2017 à 11:59
Chez moi ce code fonctionne

Public Class Form1

Private Declare Function BitBlt Lib "gdi32.dll" Alias "BitBlt" (ByVal _
hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As _
Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal _
hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer,
ByVal dwRop As System.Int32) As Long

Private memoryImage As Bitmap

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub CaptureScreen()

Dim mygraphics As Graphics = Me.CreateGraphics()
Dim s As Size = Size
memoryImage = New Bitmap(s.Width, s.Height, mygraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
Dim dc1 As IntPtr = mygraphics.GetHdc
Dim dc2 As IntPtr = memoryGraphics.GetHdc
BitBlt(dc2, 0, 0, Me.ClientRectangle.Width,
ClientRectangle.Height, dc1, 0, 0, 13369376)
mygraphics.ReleaseHdc(dc1)
memoryGraphics.ReleaseHdc(dc2)

End Sub

Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

e.Graphics.DrawImage(memoryImage, 0, 0)

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

CaptureScreen()
PrintDocument1.Print()

End Sub

End Class


tu n'as pas joint ton code corrigé ( utilise les balises de codes : <> en haut à droite du post que tu édites et mets ton code entre les balises
Commenter la réponse de cs_Le Pivert

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.