Bonjour,
Sur un log comportant plusieurs forms, j'ai un form d'impression permettant soit d'imprimer, soit d'enregistrer soit encore de quitter le formulaire
Le sub enregistrement est fait de la maniere suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 Private Sub register_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles register.Click ' enregistre la feuille sous forme de fichier image .jpg Imprimer.Visible = False Image.Visible = False Quitter.Visible = False Avant.Visible = False Arriere.Visible = False Try Dim p As New ClassImpression() p.SetDocument(Me) PictureBox.Image = buffer ' ici que picturebox contient le résultat ' boite de sauvegarde du fichier With SaveFileDialog .Title = "Enregistrer sous" 'Titre de la barre de titre .InitialDirectory = BddPath 'répertoire de départ .Filter = "Fichiers jpg|*.jpg" ' on travaille uniquement sur les .jpg .ValidateNames = True 'n'accepte que les noms valides (win 32) .AddExtension = True 'ajoute une extension au nom s'il n'y en a pas .CreatePrompt = True ' Message de confirmation si création d'un nouveau fichier .OverwritePrompt = True 'Message si le fichier existe déjà : évite l'effacement d'anciennes données If .ShowDialog = DialogResult.OK Then 'L'utilisateur a bien cliqué sur ok PictureBox.Image.Save(.FileName) End If End With Catch ex As Exception If langue = "en" Then messageaff = "Image .doc Error" infoaff = "Error" Else messageaff = "Erreur fichier image .doc" infoaff = "Erreur" End If MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Error) End Try If flagnavigate = True Then Afficheboutons() End If Imprimer.Visible = True Image.Visible = True Quitter.Visible = True End Sub
La classe impression qui valide le format, les dimensions et les marges est la suivante :
Tout marche impeccablement mais au final, je suis gene car que j'enregistre ou que j'imprime le form j'ai bien une boite de dialogue windows qui me permet de choisir l'imprimante mais ...... je voudrais pouvoir avoir une mise en page un peu comme sous office, avec possibilite de dimensionner les marges et de centrer ou non le print.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 ublic Class ClassImpression Inherits PrintDocument Public Sub SetDocument(ByVal feuille As Control) Const SRCCOPY As Integer = &HCC0020 ' pour copier la source Dim controlGraphics As Graphics = feuille.CreateGraphics ' graphique de la feuille à imprimer Dim controlSize As Size = feuille.ClientSize ' taille de la forme à copier Buffer = New Bitmap(controlSize.Width + 204, controlSize.Height + 312) ' buffer contenant la feuille à copier Dim bufferGraphics As Graphics = Graphics.FromImage(Buffer) Dim bufferHdc As IntPtr = bufferGraphics.GetHdc 'hdc de la form destinée à l'impression Dim controlHdc As IntPtr = controlGraphics.GetHdc '*** DESSINE LE FORMULAIRE DANS LA PICTURE EN LE CENTRANT NativeMethods.StretchBlt(bufferHdc, 102, 156, controlSize.Width, controlSize.Height, controlHdc, 0, 0, controlSize.Width, controlSize.Height, SRCCOPY) bufferGraphics.ReleaseHdc(bufferHdc) controlGraphics.ReleaseHdc(controlHdc) End Sub Public Sub Imprimeforme() Dim printDialogue As New PrintDialog() printDialogue.Document = Me If printDialogue.ShowDialog = DialogResult.OK Then printDialogue.PrinterSettings.DefaultPageSettings.PaperSize = printDialogue.PrinterSettings.PaperSizes.Item(6) 'dimensions pour A4 Me.Print() End If End Sub Protected Overrides Sub OnPrintPage(ByVal e As System.Drawing.Printing.PrintPageEventArgs) e.Graphics.DrawImage(buffer, 0, 0) ' impression proprement dite e.HasMorePages = False ' document une seule page End Sub End Class
j'avoue que je seche sur la methode a employer et j'aimerais vraiment avoir un conseil avisé
Merci a tous et toutes par avance![]()








Répondre avec citation


Partager