PrintForm et visual basic 2012 express

Messages postés
16
Date d'inscription
dimanche 22 octobre 2017
Dernière intervention
10 novembre 2017
- - Dernière réponse : BORISDETOURS
Messages postés
16
Date d'inscription
dimanche 22 octobre 2017
Dernière intervention
10 novembre 2017
- 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 

Votre réponse

2 réponses

Messages postés
1734
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 décembre 2018
0
Merci
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
Messages postés
16
Date d'inscription
dimanche 22 octobre 2017
Dernière intervention
10 novembre 2017
-
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
Messages postés
5622
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 décembre 2018
vb95
Messages postés
1734
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 décembre 2018
> BORISDETOURS
Messages postés
16
Date d'inscription
dimanche 22 octobre 2017
Dernière intervention
10 novembre 2017
-
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

> vb95
Messages postés
1734
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 décembre 2018
-
Merci de ta rapidité, je vois ça demain matin
Bonne soirée
BORISDETOURS
Messages postés
16
Date d'inscription
dimanche 22 octobre 2017
Dernière intervention
10 novembre 2017
> vb95
Messages postés
1734
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 décembre 2018
-
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
Messages postés
16
Date d'inscription
dimanche 22 octobre 2017
Dernière intervention
10 novembre 2017
-
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.
> BORISDETOURS
Messages postés
16
Date d'inscription
dimanche 22 octobre 2017
Dernière intervention
10 novembre 2017
-
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.