Printform vb express

vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 - 13 août 2013 à 16:37
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 - 28 août 2013 à 13:01
Bonjour,

Je suis en train de constater que l'impression d'une form avec l'objet printform n'est vraiment pas propre. D'autre part on ne peut pas gérer la position de l'impression sur la feuille. Avez-vous ces genres de problèmes ? Me faut-il passer par un Printdocument ou bien existent-ils des controles à télécharger plus poussés que le Printform.
Merci pour vos réponses.

38 réponses

Utilisateur anonyme
14 août 2013 à 20:07
Salut à tous,

Pourquoi s'obstiner à vouloir imprimer un formulaire ? Pourquoi ne pas imprimer comme il se doit ?

Un grand bonjour à ucfoutu de retour parmi nous.
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
14 août 2013 à 20:15
Bonsoir banana32,
C'est à dire ?
Vous connaissez une méthode qui permet de fabriquer un document contenant des textbox,labels, picturebox et j'en passe; et ensuite de l'imprimer ?
Je suis preneur.
Merci.
0
Utilisateur anonyme
15 août 2013 à 01:29
En principe, on fabrique son document dynamiquement en reprenant les informations contenues dans les contrôles.
On fait sa mise en page, on peut rajouter un logo, des cadres etc...

Mais on imprime pas les contrôles ni le formulaire. Ainsi, fini les bavures et étirements en tout genre...
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
15 août 2013 à 07:18
banana32 , puis-je espérer avoir une piste ? une aide de votre part ? un semblant d'espoir ?
Merci.

--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
15 août 2013 à 12:12
Un petit exemple à tester avec un TextBox :

Option Strict On
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'déclaration d'un document à imprimer
        Dim doc As New Printing.PrintDocument
        'impression en paysage
        doc.DefaultPageSettings = New Printing.PageSettings() With {.Landscape = True}
        'valeur de textbox1
        TextBox1.Text = "Texte blanc sur fond bleu"
        'abonnement à l'événement PrintPage
        AddHandler doc.PrintPage, AddressOf ConstruitDoc
        'declaration d'une prévisualisation avant impression
        Dim preview As New PrintPreviewDialog
        preview.Document = doc
        'affichage de la prévisualisation
        If preview.ShowDialog = DialogResult.OK Then
            'si ok alors impression
            doc.Print()
        End If
    End Sub

    Private Sub ConstruitDoc(ByVal sender As Object, ByVal e As Printing.PrintPageEventArgs)
        'dessin d'un rectangle bleu plein
        e.Graphics.FillRectangle(Brushes.Blue, New Rectangle(200, 200, 210, 30))
        'texte reprenant le contenu de textbox1
        e.Graphics.DrawString( _
                TextBox1.Text, _
                New Font("Arial", 12, FontStyle.Italic Or FontStyle.Underline), _
                Brushes.White, _
                New Point(205, 205))
        e.HasMorePages = False
    End Sub
End Class
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
15 août 2013 à 13:26
Bonjour
pas mal de travail pour préparer un document entier
aussi selon l'ex New Point(205, 205) si on écrit new point(textbox1.left,texbox1.top) cela correspond plus à ta form ?
il faut aussi verifier qu'on est pas en dehors de la feuille
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
15 août 2013 à 19:01
Bonsoir.
En faisant une capture d'écran, puis en sauvegardant le bitmap obtenu dans un fichier jpg, puis en insérant dans un document docx le contenu de ce fichier, puis en imprimant ce document, j'ai obtenu un résultat qu m'a semblé satisfaisant.
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
16 août 2013 à 09:16
Merci à vous,

Je testerai vos méthodes Lundi, surtout celle de Zermelo. Mais c'est quand même fou que MS n'ai pas prévu un composant qui fasse comme Zermelo le suggère.
D'ici là si vous avez d'autres idées ...

Bon week-end.

--
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
19 août 2013 à 13:46
Bonjour,

Après plusieurs tests et vue la complexité de faire comme banana32 le suggère, je reste sur le printform. C'est pas joli joli mais çà fonctionne.

Merci.

--
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
19 août 2013 à 15:39
Salut
la méthode de zermelo (que je salue) ne fonctionne pas ?
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
19 août 2013 à 15:47
Si cs_ShayW, c'est un peu moins baveux.
mais çà fait un sacré bazar: afficher la form, capturer la zone écran, faire un nouveau docx, insérer la capture dedans, imprimer le docx, le détruire.
sans compter que sur le poste d'impression il faudra toutes les ressources pour faire çà.
Mais je trouverai bien une solution pour que tout ceci soit très net. Pour l'instant je me replonge dans le code en amont qui permet de générer la form de l'étiquette.
Merci.

--
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
19 août 2013 à 16:00
c'est peut etre possible de faire le tout dans word ou excel
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
19 août 2013 à 16:10
Oui, en fait j'ai essayé dans excel et le résultat n'est pas satisfaisant.

merci.
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
21 août 2013 à 13:33
Bonjour,
@Banana32
Votre exemple avec le TextBox est impeccable, je vais le mettre en application et entre temps chercher comment faire de même pour des PictureBox, et des lignes.

Merci beaucoup.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
21 août 2013 à 13:57
Salut
comment tu utilises le barre code
c'est une réference que tu ajoutes à ton projet ?
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
21 août 2013 à 14:07
c'est une police que j'installe sur le poste et cà marche très bien, c'est très propre. Bien sur il faut passer par une moulinette pour récupérer le code ean13, je met à jour un Textbox (Tb_ean13) puis je le dessine avec ses propriétés.
e.Graphics.DrawString(.Tb_ean13.Text, New Font(.Tb_ean13.Font.Name, .Tb_ean13.Font.SizeInPoints, FontStyle.Regular), Brushes.Black, New Point(.Tb_ean13.Location.X, .Tb_ean13.Location.Y))



Au fait pour les PictureBox j'utilise :
Dim img As Image = .Pb_alt_batterie.Image
e.Graphics.DrawImage(img, .Pb_alt_batterie.Location.X, .Pb_alt_batterie.Location.Y, .Pb_alt_batterie.Width, .Pb_alt_batterie.Height)

Je ferai un résumé des choses pour valider ce post comme résolu plus tard.
Merci beaucoup.
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
21 août 2013 à 14:46
Sans résoudre le souci, j'ai moi même utilisé la méthode proposée par shayW avec l'objet printform et Capturectrl(),
j'imprime sans aucun souci de netteté sur une lasercolor (texte et shémas très précis) à des résolutions très convenables.
Mais comme le dit ucfoutu, ici, c'est un peu comme si on voulait imprimer une image en jpeg de 150*150 qu'on aurait redimensionnée a 1500*1500
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
21 août 2013 à 15:28
Oui cs_ShayW, j'ai une police, le calcul ean13 est pas si compliqué que çà. j'ai trouvé un code pour le faire.
--
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
21 août 2013 à 16:19
Par contre j'ai un problème avec la possibilité d'écrire un texte sur plusieurs lignes:

Mon Label1 dans la Form est bien sur plusieurs lignes mais pas avec çà:
e.Graphics.DrawString(.Label1.Text, .Label1.Font, Brushes.Black, .Label1.Location)

Je ne trouve pas de surcharge qui permette d'envoyer aussi les retours à la ligne ..

Merci.

--
0
Utilisateur anonyme
22 août 2013 à 13:37
Pour les textes plus long, il faut définir un rectangle qui contiendra ce texte et définir un paramètre StringFormat qui déterminera comment ton texte sera mis en forme.

Pour reprendre mon exemple :
    Private Sub ConstruitDoc(ByVal sender As Object, ByVal e As Printing.PrintPageEventArgs)
        'dessin d'un rectangle bleu plein
        e.Graphics.FillRectangle(Brushes.Blue, New Rectangle(200, 200, 250, 300))
        'texte reprenant le contenu de textbox1
        e.Graphics.DrawString( _
                TextBox1.Text, _
                New Font("Arial", 12, FontStyle.Italic Or FontStyle.Underline), _
                Brushes.White, _
                New Rectangle(200, 200, 250, 300), _
                New StringFormat() With {.LineAlignment = StringAlignment.Center})
        e.HasMorePages = False
    End Sub
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
22 août 2013 à 14:32
Merci.
Vraiment tu m'aide beaucoup.

--
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
26 août 2013 à 10:25
Bonjour à tous,

Je cherche à agrandir une police de caractere en hauteur en utilisant e.Graphics.DrawString . C'est un code barre ean13 qui est trop petit en hauteur. J'ai essayé en lui demandant de dessiner la chaîne dans un rectangle mais çà ne le fait pas.
Une idée ?

Merci.
0
Utilisateur anonyme
26 août 2013 à 13:17
Tu dois opérer une transformation géométrique en t'aidant d'un GraphicPath :

Toujours en reprenant mon exemple :

    Private Sub ConstruitDoc(ByVal sender As Object, ByVal e As Printing.PrintPageEventArgs)
        'rectangle cible (augmenter la hauteur 400 si besoin)
        Dim Cible As New Rectangle(200, 200, 250, 400)
        'font utilisée (à changer bien sur)
        Dim MaFont As New Font("Arial", 15, FontStyle.Regular)
        'format d'affichage ('center' pour centrer dans le rectangle cible)
        Dim MonFormat As New StringFormat() With {.LineAlignment = StringAlignment.Center}
        'graphicPath
        Dim MonGrPath As New GraphicsPath

        MonGrPath.AddString(TextBox1.Text, _
            MaFont.FontFamily, CInt(FontStyle.regular), _
            Cible.Height, New PointF(0, 0), MonFormat)

        Dim MonGrRect As RectangleF = MonGrPath.GetBounds
        Dim CiblePts() As PointF = { _
            New PointF(Cible.Left, Cible.Top), _
            New PointF(Cible.Right, Cible.Top), _
            New PointF(Cible.Left, Cible.Bottom) _
        }
        e.Graphics.FillRectangle(Brushes.YellowGreen, Cible)
        e.Graphics.Transform = New Matrix(MonGrRect, CiblePts)
        e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
        e.Graphics.FillPath(Brushes.Blue, MonGrPath)
        e.Graphics.DrawPath(Pens.Blue, MonGrPath)
        e.Graphics.ResetTransform()
        e.Graphics.DrawRectangle(Pens.Black, Cible)
        e.HasMorePages = False
    End Sub
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
26 août 2013 à 18:04
Ok, merci banana32,

je teste çà demain.

--
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
27 août 2013 à 11:10
Bonjour banana32,

J'ai fait ce que tu me propose mais le résultat n'est pas bon.
J'aimerai pouvoir te montrer une capture écran du résultat mais je ne sais pas insérer une image dans un message.

Merci.

--
0
Utilisateur anonyme
27 août 2013 à 12:06
"mais je ne sais pas insérer une image dans un message"
Je ne sais pas non plus. Je ne vais pas pouvoir t'aider plus.
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
27 août 2013 à 12:26
OK, bon, je crois que je vais dessiner moi-même les barres du code ean13 grace à : http://grandzebu.net/informatique/codbar/ean13.htm
Merci, je vous tiens au jus.
0
Utilisateur anonyme
27 août 2013 à 20:16
Tu dis que le résultat n'est pas bon. Merci de préciser ce qui cloche.
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
28 août 2013 à 08:15
0
Utilisateur anonyme
28 août 2013 à 12:50
A mon avis, il suffirait de reprendre mon code exemple du 15 août 2013 à 12:12 et de changer simplement la taille de la police. Ceci après s'être assuré qu'une taille plus grande est disponible pour cette police. Tu peux aussi tenter de changer le paramètre FontStyle.
0
Rejoignez-nous