IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

problème d'impression et procedure d'EDM.


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Drilling enginer
    Inscrit en
    Décembre 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Drilling enginer
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 123
    Par défaut problème d'impression et procedure d'EDM.
    Bonjour,

    je suis en VB.net avec vs2019.

    j'ai en fait un problème et une question, je commence par le problème.

    je voudrai imprimer deux voire 3 feuilles, j'utilise la commande e.hasmorepage = true, mais il lance des pages à n'en plus finir, et c'est toujours la première qui apparait sur toutes ....
    s
    je met le code

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
     
     
     
     
            e.Graphics.DrawString(Final_datas.lb_well_name.Text, Final_datas.lb_well_name.Font, Brushes.Black, 50, 50)
     
            e.Graphics.DrawString(Final_datas.Lb_date.Text, Final_datas.Lb_date.Font, Brushes.Black, 500, 50)
     
            e.Graphics.DrawString(Form1.Label19.Text, Form1.Label19.Font, Brushes.Black, 50, 55)
     
     
            e.Graphics.DrawString(Form1.Label1.Text, Form1.Label1.Font, Brushes.Black, 50, 100)
     
     
            e.Graphics.DrawString(Final_datas.Lab_pr_csg_size.Text, Final_datas.Lab_pr_csg_size.Font, Brushes.Black, 50, 150)
     
            e.Graphics.DrawString(Final_datas.Lab_pr_csg_weight.Text, Final_datas.Lab_pr_csg_weight.Font, Brushes.Black, 50, 175)
     
            e.Graphics.DrawString(Final_datas.Lab_pr_csg_shoe.Text, Final_datas.Lab_pr_csg_shoe.Font, Brushes.Black, 50, 200)
     
            e.Graphics.DrawString(Final_datas.Lab_pr_csg_int_capa.Text, Final_datas.Lab_pr_csg_int_capa.Font, Brushes.Black, 50, 225)
     
     
     
            e.Graphics.DrawString(Form1.Label2.Text, Form1.Label2.Font, Brushes.Black, 350, 100)
     
            e.Graphics.DrawString(Final_datas.Lab_csg_size.Text, Final_datas.Lab_csg_size.Font, Brushes.Black, 350, 150)
            e.Graphics.DrawString(Final_datas.Lab_csg_weight.Text, Final_datas.Lab_csg_weight.Font, Brushes.Black, 550, 150)
     
            e.Graphics.DrawString(Final_datas.Lab_csg_int_vol.Text, Final_datas.Lab_csg_int_vol.Font, Brushes.Black, 350, 175)
            e.Graphics.DrawString(Final_datas.Lab_csg_ext_vol.Text, Final_datas.Lab_csg_ext_vol.Font, Brushes.Black, 550, 175)
     
            e.Graphics.DrawString(Final_datas.Lab_csg_int_dia.Text, Final_datas.Lab_csg_int_dia.Font, Brushes.Black, 350, 200)
     
            e.Graphics.DrawString(Final_datas.Lab_collar_depth.Text, Final_datas.Lab_collar_depth.Font, Brushes.Black, 550, 225)
            e.Graphics.DrawString(Final_datas.Lab_shoe_depth.Text, Final_datas.Lab_shoe_depth.Font, Brushes.Black, 350, 225)
     
            e.Graphics.DrawString(Final_datas.Lab_shoe_track_lenght.Text, Final_datas.Lab_shoe_track_lenght.Font, Brushes.Black, 50, 250)
     
            e.Graphics.DrawString(Form1.Label3.Text, Form1.Label3.Font, Brushes.Black, 50, 475)
     
            e.Graphics.DrawString(Final_datas.lb_int_vol_OH.Text, Final_datas.lb_int_vol_OH.Font, Brushes.Black, 50, 525)
            e.Graphics.DrawString(Final_datas.Lb_TD_MD.Text, Final_datas.Lb_TD_MD.Font, Brushes.Black, 50, 550)
            e.Graphics.DrawString(Final_datas.Lb_TD_TVD.Text, Final_datas.Lb_TD_TVD.Font, Brushes.Black, 50, 575)
            e.Graphics.DrawString(Final_datas.Lb_lg_OH.Text, Final_datas.Lb_lg_OH.Font, Brushes.Black, 50, 600)
     
            e.Graphics.DrawString(Form1.Label4.Text, Form1.Label4.Font, Brushes.Black, 50, 650)
     
            e.Graphics.DrawString(Final_datas.Lb_vol_lead.Text, Final_datas.Lb_vol_lead.Font, Brushes.Black, 50, 700)
            e.Graphics.DrawString(Form1.Label7.Text & " " & My.Settings.excess_lead & Form1.Label9.Text, Form1.Label7.Font, Brushes.Black, 400, 700)
            e.Graphics.DrawString(Final_datas.Lb_vol_excess_lead.Text, Final_datas.Lb_vol_excess_lead.Font, Brushes.Black, 200, 725)
     
            e.Graphics.DrawString(Final_datas.Lb_vol_tail.Text, Final_datas.Lb_vol_tail.Font, Brushes.Black, 50, 750)
            e.Graphics.DrawString(Form1.Label8.Text & " " & My.Settings.excess_tail & Form1.Label9.Text, Form1.Label8.Font, Brushes.Black, 400, 750)
            e.Graphics.DrawString(Final_datas.Lb_vol_excess_tail.Text, Final_datas.Lb_vol_excess_tail.Font, Brushes.Black, 200, 775)
     
     
            e.Graphics.DrawString(Final_datas.Lab_vol_shoe_track.Text, Final_datas.Lab_vol_shoe_track.Font, Brushes.Black, 50, 850)
            e.Graphics.DrawString(Final_datas.Lab_half_ST.Text, Final_datas.Lab_half_ST.Font, Brushes.Black, 350, 850)
     
            e.Graphics.DrawString(Final_datas.lab_vol_int_csg_to_fc.Text, Final_datas.Font, Brushes.Black, 50, 875)
            e.Graphics.DrawString(Final_datas.Lab_str_displ.Text, Final_datas.Lab_str_displ.Font, Brushes.Black, 50, 900)
     
            e.Graphics.DrawString(Final_datas.Lb_diplac_max.Text, Final_datas.Lb_diplac_max.Font, Brushes.Black, 50, 950)
            e.Graphics.DrawString(Final_datas.Lab_str_displ_max.Text, Final_datas.Lab_str_displ_max.Font, Brushes.Black, 50, 975)
     
     
            e.HasMorePages = True
     
     
            e.Graphics.DrawImage(My.Resources.bouton1, 50, 100)
     
     
        End Sub
    ensuite la question, j'envoi sur une form qui recapitule les datas, des affichages de label avec le texte et les datas, ce qui me permet de reprendre le label pour l'impression, le texte est déja présent, mais j'aurai aimé avoir le texte en style classique et le data en rouge et gras ?

    exemple de code ci dessus,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Tb_excess_lead_TextChanged(sender As Object, e As EventArgs) Handles Tb_excess_lead.TextChanged
     
            Try
                My.Settings.excess_lead = Tb_excess_lead.Text
            Catch ex As Exception When Tb_excess_lead.Text = ""
                Tb_excess_lead.Text = 0
            End Try
     
     
            My.Settings.vol_lead_exc = My.Settings.vol_lead + (My.Settings.vol_lead * (My.Settings.excess_lead / 100))
     
            Final_datas.Lb_vol_excess_lead.Text = "Vol. Lead Slurry with " & My.Settings.excess_lead & " % excess = " & Math.Round(My.Settings.vol_lead + (My.Settings.vol_lead * (My.Settings.excess_lead / 100)), 2) & " m³"
        End Sub
    voyez la dernière ligne de code envoi dans la form final_datas, le label vol_excess_lead.text avec sa définition complète, j'aurai aimé avoir la partie texte entre les "" en standard et les datas de my.settings.excess_lead en rouge et gras.

    c'est pour cela que mon titre est EDM (en...r de mouche)

    merci de votre aide

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonsoir,

    Je crois que tu devrais calculer l'espace que tu occupes sur une page, par rapport à ses dimensions, et utiliser HasMorePage comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' En supposant que tu détermines la variable Fini en fonction du résultat du calcul que j'évoque ci-dessus
    If Fini Then
      HasMorePage = False
    Else 
      HasMorePage = True
    End If
    Voici, une procédure PrintPage qui envoie à l'imprimante le contenu d'un fichier TXT et contrôle de l'espace utilisé :

    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
    Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As  System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
      Dim Ligne As String
      Dim Position As System.Drawing.PointF
      Dim Rectangle As RectangleF	
      Dim Police As Font
      Dim HauteurLigne As Single
      Dim NbrLignesParPage As Integer
      Dim NumLigne As Integer = 0 			' Comptage des lignes imprimées
    ' Dans cet exemple, toutes les lignes utilisent la même police
      Police = New Font("Courier New", 10, FontStyle.Bold)
      HauteurLigne = Police.GetHeight(e.Graphics)
    ' Nombre de lignes par page est la hauteur de la zone imprimable divisée par la hauteur d'une ligne 
      NbrLignesParPage = e.MarginBounds.Height / HauteurLigne
     
      Do Until MonDoc.Peek = -1				' Lire le contenu du fichier ligne par ligne
        Ligne = MonDoc.ReadLine()				 
     
        Position = New PointF(e.MarginBounds.Left, e.MarginBounds.Top +  (NumLigne * HauteurLigne)) ' et calculer la position de la ligne à imprimer
     
        		' Définir les coordonnées de la zone  dans laquelle la ligne sera imprimée  avec la position calculée et sa taille
        Rectangle.Location = Position    		
        Rectangle.Width = e.MarginBounds.Width	' Récupérer la largeur entre marges
        Rectangle.Height = HauteurLigne			' et utiliser la hauteur de ligne
     
        e.Graphics.DrawString(Ligne, Police, Brushes.Black, Rectangle)
     
        NumLigne += 1 					' Incrémenter le compteur de lignes
        If NumLigne > NbrLignesParPage Then Exit Do	' et vérifier si on est en fin de page
      Loop
     
      If MonDoc.Peek <> -1 Then 				' Relancer l'impression de la page suivante si fichier as terminé
        e.HasMorePages = True				
      Else
        MonDoc.Close()
        MonDoc = New StreamReader(TDocument.Text) 	' En prévisualisation, cette procédure est exécutée une première fois pour l’affichage et il faut rouvrir le fichier pour 
      End If 							' 
    End Sub							'
    J'espère que ceci t'aidera ...

  3. #3
    Membre confirmé
    Homme Profil pro
    Drilling enginer
    Inscrit en
    Décembre 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Drilling enginer
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 123
    Par défaut
    merci je vais essayer ca, je te tiens au courant, si je m'en sors, et aussi si je ne m'en sors pas

  4. #4
    Membre confirmé
    Homme Profil pro
    Drilling enginer
    Inscrit en
    Décembre 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Drilling enginer
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 123
    Par défaut
    bon, je bute, j'ai repris ton exemple, mais d'après ce que je comprend, MonDoc doit etre un fichier texte ?, j'ai essayé d'ajouter une form dans laquelle j'ai mis une richtextbox, ancré au centre, dans laquelle j'ai mis des datas sous forme de label, ensuite j'ai remplacé MonDoc par le nom de ma form.label, et il ne comprend pas !

    Je pense qu'il faudrait que je crée un fichier text mais comment ?

    Merci

  5. #5
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Oui, dans mon exemple il s'agit d'un fichier TXT lu ligne par ligne, chaque ligne étant envoyée à l'imprimante, jusqu'à fin de fichier.
    Si, tu utilises une RichTextBox, tu dois la lire aussi ligne par ligne, en envoyant chaque ligne à l'imprimante, jusqu'à la fin des lignes

    Mais le principal principe à mettre en œuvre, compte tenu de ta question initiale, c'est de connaître le nombre de lignes que tu peux mettre sur une page et de compter les lignes effectivement envoyées à l'imprimante. Et c'est en fonction de cela que tu dois placer HasMorePage à True ou à False.

    J'ai d'autres exemples d'impression, éventuellement avec création d'un fichier TXT, mais aucun ne sera la réponse exacte pour TON projet.

    Ci-joint, une projet de test d'impression de différentes zones de texte, avec passage par un fichier intermédiaire de type TXT. L'exemple est écrit en espagnol mais seuls les commentaires explicatifs peuvent éventuellement te poser problèmes : pense à Google (Translator).

    Je ne reprendrai pas le forum avant 16h, j'espère que tu pourras te dépanner jusque là.


    ImpresionES.zip

  6. #6
    Membre confirmé
    Homme Profil pro
    Drilling enginer
    Inscrit en
    Décembre 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Drilling enginer
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 123
    Par défaut
    Oui c'est ce que j'ai fais avec le richtextbox, mais peek, streamreader et readline, ne sont pas des membres de richtextbox ...

  7. #7
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Je ne pensais pas que tu utilisais une RichTextBox sans savoir comment accéder à ses lignes ...

    Sérieusement, je t'ai préparé un exemple adapté à "ta" RichTextBox, je joins le projet : ImpressionRichTextBoxOK.zip

    Mais avant de lancer ce programme, regarde cette video pour savoir comment l'utiliser : https://www.dropbox.com/s/9369ao9sjp...xtBox.mp4?dl=0


    Bon amusement,


  8. #8
    Membre confirmé
    Homme Profil pro
    Drilling enginer
    Inscrit en
    Décembre 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Drilling enginer
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 123
    Par défaut
    Merci, je vais essayer, la richboxtext c'etait pour essayer ton programme qui parlait de doc.text !, sinon je fais .....bien plus compliqué

    pour l'impression j'ai crée une form avec une richtextbox dedans mais qui ne me sert pas, puisque je met toutes mes lignes de code dans la form de code ....

  9. #9
    Membre confirmé
    Homme Profil pro
    Drilling enginer
    Inscrit en
    Décembre 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Drilling enginer
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 123
    Par défaut
    bon j'ai regardé la vidéo et regardé fichier et je l'ai lancé, j'ai en majorité compris, mais c'est pas tout a fait ça que je cherche, comme je te disais la richtextbox je n'y touche pas, elle est la pour me servir de support, je ne met rien dedans, je vais t'envoyer le programme complet c'est surement pas écrit de façon académique, mais c'est pas mon métier, et je fais ça pour m'amuser, alors soit indulgent
    dans le program dans toutes les formes il y a un bouton "import data" utilise le, sinon comme le programme est assez spécifique tu risques d’être un peu perdu.
    bon le zip fais 2.5 Mo et le max c'est 2 Mo, alors comment faire ?

  10. #10
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    ...

    Dépose donc ton zip sur un site comme Dropbox ou SkyDrive ou autre (comme j'ai fait avec la video) et envoie-moi le lien pour que je télécharge, tu peux faire un message privé pour cela.

    Je devrais avoir un peu de temps demain après-midi, je ne te promets rien quand au résultat : je te rappelle que ta question initiale était ± "comment ne pas faire de sauts de pages inutiles". Sur ce point, je pense t'avoir donné les moyens nécessaires.

    Bonne nuit,


  11. #11
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Un petit imprévu m’a permis d’examiner ton problème plus tôt qu’annoncé.

    Dans final_datas.vb, j’ai ajouté un PrintDialog pour pouvoir sélectionner une imprimante, cela me permet notamment de faire des essais vers un fichier pdf plutôt que de gaspiller du papier sur l’imprimante. Tu pourras toujours l’enlever si le choix de l’imprimante n’est pas une option de ton programme. Tu vois le résultat de cet ajout sur l’illustration ci-dessous et voici le code qui en découle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub PrintToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PrintToolStripMenuItem.Click
            '' Ne pas faire ===>     Call impression.PrintDocument1.Print()   **** c'est fait par PrintPreviewDialog
        End Sub
     
        Private Sub PrintPreviewToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PrintPreviewToolStripMenuItem.Click
            impression.PrintPreviewDialog1.ShowDialog()
        End Sub
     
        Private Sub PrinteSelectionToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PrinteSelectionToolStripMenuItem.Click
            impression.PrintDialog1.ShowDialog()
        End Sub
    Bien sûr, ma tentative de réponse à ton problème d’impression se trouve dans impression.vb, dans la procédure PrintDocument1_PrintPage(… ).
    Je ne suis intervenu que sur les 2 premières lignes d’impression (e.Graphics.DrawString( … ), comme mis en évidence sur la vidéo suivante où je te montre l’effet de mes codes : https://www.dropbox.com/s/jylobdk52m...rimer.mp4?dl=0

    Voici mes codes :
    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
       Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
     
            Dim Ligne As String
            Dim Position As System.Drawing.PointF
            Dim Rectangle As RectangleF
            Dim Police As Font
            Dim HauteurLigne As Single
     
            Police = Final_datas.lb_well_name.Font
            HauteurLigne = Police.GetHeight(e.Graphics)
            Ligne = Final_datas.lb_well_name.Text
            Position = New PointF(50, 50)          '''' Ceci correspond aux valeurs Left et Top que tu utilises
            Rectangle.Location = Position
     
            If Position.Y + HauteurLigne > e.MarginBounds.Height Then
                e.HasMorePages = True
                Exit Sub
            Else
                e.HasMorePages = False
            End If
            e.Graphics.DrawString(Ligne, Police, Brushes.Black, Rectangle)
     
            Police = Final_datas.Lb_date.Font
            HauteurLigne = Police.GetHeight(e.Graphics)
            Ligne = Final_datas.Lb_date.Text
            Position = New PointF(500, 50)          '''' Ceci correspond aux valeurs Left et Top que tu utilises
            Rectangle.Location = Position
     
            If Position.Y + HauteurLigne > e.MarginBounds.Height Then
                e.HasMorePages = True
                Exit Sub
            Else
                e.HasMorePages = False
            End If
            e.Graphics.DrawString(Ligne, Police, Brushes.Black, Rectangle)
     
            ' ....................  à continuer ......................
    A toi de reproduire le même mécanisme pour chaque impression que tu souhaites. Tout fonctionnera impeccablement tant que tu ne produis pas de saut de page. Lorsque se produira un saut de page, les positions Top de tes zones d’impression devront être « remises à 0 ». Comprends bien que si tu demandes une impression en position 1000 (par exemple) et que cela produit un saut de page, tu dois remettre ta zone d’impression en haut de la nouvelle page. Il faut dire que ton approche de « reproduction sur papier » (ou presque) de l'écran, ne facilite guère la gestion des sauts de pages. Mais d’un autre côté, puisque tu es capable de calculer la position que chaque zone sur la page, tu dois pouvoir aussi calculer quand tu veux passer à la page et où imprimer dans ce cas.

    Tu dois encore savoir que le code suivant relance la PrintDocument1_PrintPage(… ). A toi de savoir que faire lorsqu’elle s’exécute une 2ème, une 3ème, … fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                e.HasMorePages = True
                Exit Sub

    Bon travail, je retourne aux occupations que j'ai différées ...

    J'allais oublier l'illustration ...
    Nom : Pierrelec01.jpg
Affichages : 300
Taille : 201,1 Ko

  12. #12
    Membre confirmé
    Homme Profil pro
    Drilling enginer
    Inscrit en
    Décembre 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Drilling enginer
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 123
    Par défaut
    Hoooo, merci beaucoup, je m'en vais essayer ça ce soir, c'est plus que ce que je demandais, enfin que j'avais osé demander !

    Sinon pas trop horrifié par mes codes ?

    Encore merci

    Pierre

  13. #13
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    trop horrifié par mes codes ?
    ...

  14. #14
    Membre confirmé
    Homme Profil pro
    Drilling enginer
    Inscrit en
    Décembre 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Drilling enginer
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 123
    Par défaut
    bon je dois etre stupide ou je ne sais quoi, mais ça marche pas ....



    j'ai fais

    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
     
            Police = Final_datas.Lab_str_displ_max.Font
            HauteurLigne = Police.GetHeight(e.Graphics)
            Ligne = Final_datas.Lab_str_displ_max.Text
            Position = New PointF(50, 975)          '''' Ceci correspond aux valeurs Left et Top que tu utilises
            Rectangle.Location = Position
     
            If Position.Y + HauteurLigne > e.MarginBounds.Height Then
                e.HasMorePages = True
     
                Exit Sub
            Else
                e.HasMorePages = False
            End If
            e.Graphics.DrawString(Final_datas.Lab_str_displ_max.Text, Final_datas.Lab_str_displ_max.Font, Brushes.Black, Rectangle)
     
     
            Police = Final_datas.Lab_str_displ_max.Font
            HauteurLigne = Police.GetHeight(e.Graphics)
            Ligne = Final_datas.Lab_str_displ_max.Text
            Position = New PointF(50, 50)          '''' Ceci correspond aux valeurs Left et Top que tu utilises
            Rectangle.Location = Position
     
            If Position.Y + HauteurLigne > e.MarginBounds.Height Then
                e.HasMorePages = True
                Exit Sub
            Else
                e.HasMorePages = False
            End If
            e.Graphics.DrawString(Final_datas.Lab_str_displ_max.Text, Final_datas.Lab_str_displ_max.Font, Brushes.Black, Rectangle)

    donc il voit que le nbre de ligne dépasse le nbre de ligne par page, il lance hasmorepage, et ensuite dans la page suivante je lui remet la derniere data avec la nouvelle position, mais le programme me lance des pages a n'en plus finir avec tjrs l'impression de la première page, pour info je regarde la valeur de marginbounds elle est de 965.

  15. #15
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Cette ligne de code e.Graphics.DrawString(Final_datas.Lab_str_displ_max.Text, Final_datas.Lab_str_displ_max.Font, Brushes.Black, Rectangle) ne correspond pas du tout à ce qu'il faut, vois dans mon code, cela doit être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            e.Graphics.DrawString(Ligne, Police, Brushes.Black, Rectangle)
    Certes, cela ne change pas grand chose, sauf qu'avec toujours la même ligne d'impression, ça évite des erreurs (et puis pour la suite, on pourra peut-être la mettre dans une boucle).

    Par ailleurs, et c'est là ton problème actuel, lorsque tu as produit un saut de page en forçant une position au-delà de la limite supportée, tu refais une impression en 50,50 (bonne idée en première approche) mais comme je te l'ai signalé, le HasMorePage = True + Exit Sub provoque la relance de la procédure. Cette procédure recommence à sa première ligne de code, réimprime tout ce que tu as demandé jusque là, arrive à l'impression forcée au-delà de la limite supportée, recommence le saut de page, recommence à sa première ligne de code, ..., ..., ...

    Tout fonctionnera impeccablement tant que tu ne produis pas de saut de page. Lorsque se produira un saut de page, les positions Top de tes zones d’impression devront être « remises à 0 ». Comprends bien que si tu demandes une impression en position 1000 (par exemple) et que cela produit un saut de page, tu dois remettre ta zone d’impression en haut de la nouvelle page. Il faut dire que ton approche de « reproduction sur papier » (ou presque) de l'écran, ne facilite guère la gestion des sauts de pages. Mais d’un autre côté, puisque tu es capable de calculer la position que chaque zone sur la page, tu dois pouvoir aussi calculer quand tu veux passer à la page et où imprimer dans ce cas.
    A toi d'imaginer le mécanisme qui va te permettre de relancer _PrintPage, en continuant l'impression au début d'un nouvelle page, sans ré-imprimer ce qui l'a déjà été. C'est pas gagné vu ton organisation "séquentielle" de tes données à imprimer ...

    J'ai une idée d'algorithme qui pourrait te convenir, je le peaufine et je te l'envoie tout à l'heure ...

  16. #16
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Peut-être une bonne solution ...

    Voici TOUT le code de la classe impression.vb (sauf ce que tu dois compléter dans la procédure PrepareImpression().

    L'algorithme consiste à remplir une table avec tout le nécessaire à l'impression et relire cette table à l'aide d'une boucle (==> une seule ligne DrawString) dans la procédure _PrintPage.
    Le remplissage de cette table se fait dans PrepareImpression() et c'est ce que tu dois compléter (j'ai écrit les 4 premières données d'impression à titre d'exemple).
    Les valeurs de Y sont toujours des valeurs relatives à l'impression précédente, hauteur de ligne comprise (un Y de 0 implique un rectangle d'impressionsur la même ligne que le précédent). Sans doute qu'il faudra plusieurs essais pour définir ces valeurs de Y, (il me faudra sûrement affiner la calcul du Y effectif, calcul de PositionYPrec dans le code).

    Je suis intéressé que tu remplisses toute la table avec toutes ces valeurs que tu as dans _PrintPage. En principe tu peux garder toutes tes valeurs X et pour les Y, il ne faut prendre que les différences d'une impression à l'autre.
    Je reprendrai ensuite tout le code (de impression.vb) pour tester.

    Dans un premier temps, il ne faut tracer aucune ligne ni imprimer aucune image (on verra cela ensuite), rien que les libellés et les données.

    Penses à faire une copie de TA classe impression avant de coller mon code ...

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Public Class impression
     
        Private Structure DonneePourImpression
            Dim Texte As String   ' le texte à imprimer
            Dim Police As Font    ' sa police
            Dim Valeur_X_Rect As Single   ' Position LEFT du rectangle d'impression par rapport à la marge
            Dim Valeur_Y_RelativePrec As Single ' Position TOP du rectangle d'impression par rapport aux impressions précédentes
        End Structure
     
        Dim MaxIndideImpression As Integer = 200 ' Si 200 pas suffisant, augmenter !!!
        Dim TableAImprimer(MaxIndideImpression) As DonneePourImpression
     
        Private Sub PrepareImpression()
     
            For i As Integer = 0 To MaxIndideImpression
                TableAImprimer(i).Texte = String.Empty   ' Initialisation indispensable car la valeur Empty sert au contrôle de la boucle d'impression
            Next
     
            TableAImprimer(0).Texte = Final_datas.lb_well_name.Text
            TableAImprimer(0).Police = Final_datas.lb_well_name.Font
            TableAImprimer(0).Valeur_X_Rect = 50    '50 unités à droite de la 1ère position possible
            TableAImprimer(0).Valeur_Y_RelativePrec = 50  '50 unités en dessous de la 1ère position possible
     
            TableAImprimer(1).Texte = Final_datas.Lb_date.Text
            TableAImprimer(1).Police = Final_datas.Lb_date.Font
            TableAImprimer(1).Valeur_X_Rect = 500    '500 unités à droite de la 1ère position possible
            TableAImprimer(1).Valeur_Y_RelativePrec = 0  ' à la même hauteur que l'impression précédente
     
            TableAImprimer(2).Texte = Form1.Label19.Text
            TableAImprimer(2).Police = Form1.Label19.Font
            TableAImprimer(2).Valeur_X_Rect = 50  '50 unités à droite de la 1ère position possible
            TableAImprimer(2).Valeur_Y_RelativePrec = 5    ' 5 unités à la suite de l'impression précédente
     
            TableAImprimer(3).Texte = Form1.Label1.Text
            TableAImprimer(3).Police = Form1.Label1.Font   '
            TableAImprimer(3).Valeur_X_Rect = 100 '100 unités à droite de la 1ère position possible
            TableAImprimer(3).Valeur_Y_RelativePrec = 0    ' à la même hauteur que l'impression précédente
     
            ' ..............
     
     
        End Sub
     
        Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
     
            Dim Ligne As String
            Dim Position As System.Drawing.PointF
            Dim Rectangle As RectangleF
            Dim Police As Font
            Dim HauteurLigne As Single = 0
            Dim PositionYPrec As Single = 0
            Static IndiceTable As Integer = 0
     
            If IndiceTable = 0 Then
                PrepareImpression()
            End If
     
            Do
                Police = TableAImprimer(IndiceTable).Police
                Ligne = TableAImprimer(IndiceTable).Texte
                If TableAImprimer(IndiceTable).Valeur_Y_RelativePrec > 0 Then
                    PositionYPrec += TableAImprimer(IndiceTable).Valeur_Y_RelativePrec + HauteurLigne
                Else
                    PositionYPrec += TableAImprimer(IndiceTable).Valeur_Y_RelativePrec
                End If
                HauteurLigne = Police.GetHeight(e.Graphics)
                Position = New PointF(TableAImprimer(IndiceTable).Valeur_X_Rect, PositionYPrec)
                Rectangle.Location = Position
     
                If Position.Y + HauteurLigne > e.MarginBounds.Height Then
                    e.HasMorePages = True
                    Exit Sub
                Else
                    e.HasMorePages = False
                End If
                e.Graphics.DrawString(Ligne, Police, Brushes.Black, Rectangle)
                IndiceTable += 1
     
            Loop Until TableAImprimer(IndiceTable).Texte = String.Empty
        End Sub
    End Class

  17. #17
    Membre confirmé
    Homme Profil pro
    Drilling enginer
    Inscrit en
    Décembre 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Drilling enginer
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 123
    Par défaut
    Bon tu me rassures un peu..., tout était pas faux et ma logique aurait du être bonne, si Mr crosoft n'avait pas compliqué à souhait !.

    J'essaye et je te tiens au courant,

    merci

  18. #18
    Membre confirmé
    Homme Profil pro
    Drilling enginer
    Inscrit en
    Décembre 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Drilling enginer
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 123
    Par défaut
    Bon ça marche et ca imprime sur 2 pages ... , j'ai forcé sur les interlignes pour mettre des data's sur la page 2.

    j'ai cru comprendre que tu voulais t'amuser un peu, alors je te copie le code complet

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
     
    Public Class impression
     
     
        Private Structure DonneePourImpression
                Dim Texte As String   ' le texte à imprimer
                Dim Police As Font    ' sa police
                Dim Valeur_X_Rect As Single   ' Position LEFT du rectangle d'impression par rapport à la marge
                Dim Valeur_Y_RelativePrec As Single ' Position TOP du rectangle d'impression par rapport aux impressions précédentes
            End Structure
     
            Dim MaxIndideImpression As Integer = 200 ' Si 200 pas suffisant, augmenter !!!
            Dim TableAImprimer(MaxIndideImpression) As DonneePourImpression
     
            Private Sub PrepareImpression()
     
                For i As Integer = 0 To MaxIndideImpression
                    TableAImprimer(i).Texte = String.Empty   ' Initialisation indispensable car la valeur Empty sert au contrôle de la boucle d'impression
                Next
     
                TableAImprimer(0).Texte = Final_datas.lb_well_name.Text
                TableAImprimer(0).Police = Final_datas.lb_well_name.Font
                TableAImprimer(0).Valeur_X_Rect = 50    '50 unités à droite de la 1ère position possible
                TableAImprimer(0).Valeur_Y_RelativePrec = 50  '50 unités en dessous de la 1ère position possible
     
                TableAImprimer(1).Texte = Final_datas.Lb_date.Text
                TableAImprimer(1).Police = Final_datas.Lb_date.Font
            TableAImprimer(1).Valeur_X_Rect = 500    '500 unités à droite de la 1ère position possible
            TableAImprimer(1).Valeur_Y_RelativePrec = 0  ' à la même hauteur que l'impression précédente
     
            '****************** previous casing ************
     
            TableAImprimer(2).Texte = Final_datas.Lab_pr_csg_size.Text
            TableAImprimer(2).Police = Final_datas.Lab_pr_csg_size.Font
            TableAImprimer(2).Valeur_X_Rect = 50  '50 unités à droite de la 1ère position possible
            TableAImprimer(2).Valeur_Y_RelativePrec = 50    ' 5 unités à la suite de l'impression précédente
     
            TableAImprimer(3).Texte = Final_datas.Lab_pr_csg_weight.Text
            TableAImprimer(3).Police = Final_datas.Lab_pr_csg_weight.Font   '
            TableAImprimer(3).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(3).Valeur_Y_RelativePrec = 0    ' à la même hauteur que l'impression précédente
     
     
            TableAImprimer(4).Texte = Final_datas.Lab_pr_csg_shoe.Text
            TableAImprimer(4).Police = Final_datas.Lab_pr_csg_shoe.Font   '
            TableAImprimer(4).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(4).Valeur_Y_RelativePrec = 20    ' à la même hauteur que l'impression précédente
     
            TableAImprimer(5).Texte = Final_datas.Lab_pr_csg_int_capa.Text
            TableAImprimer(5).Police = Final_datas.Lab_pr_csg_int_capa.Font   '
            TableAImprimer(5).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(5).Valeur_Y_RelativePrec = 0   ' à la même hauteur que l'impression précédente
     
            '****************** casing to run ***********
     
            TableAImprimer(6).Texte = Final_datas.Lab_csg_size.Text
            TableAImprimer(6).Police = Final_datas.Lab_csg_size.Font   '
            TableAImprimer(6).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(6).Valeur_Y_RelativePrec = 100   ' à la même hauteur que l'impression précédente
     
            TableAImprimer(7).Texte = Final_datas.Lab_csg_weight.Text
            TableAImprimer(7).Police = Final_datas.Lab_csg_weight.Font   '
            TableAImprimer(7).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(7).Valeur_Y_RelativePrec = 0   ' à la même hauteur que l'impression précédente
     
            TableAImprimer(8).Texte = Final_datas.Lab_csg_int_vol.Text
            TableAImprimer(8).Police = Final_datas.Lab_csg_int_vol.Font   '
            TableAImprimer(8).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(8).Valeur_Y_RelativePrec = 20   ' à la même hauteur que l'impression précédente
     
            TableAImprimer(9).Texte = Final_datas.Lab_csg_ext_vol.Text
            TableAImprimer(9).Police = Final_datas.Lab_csg_ext_vol.Font   '
            TableAImprimer(9).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(9).Valeur_Y_RelativePrec = 0  ' à la même hauteur que l'impression précédente
     
            TableAImprimer(10).Texte = Final_datas.Lab_csg_int_dia.Text
            TableAImprimer(10).Police = Final_datas.Lab_csg_int_dia.Font   '
            TableAImprimer(10).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(10).Valeur_Y_RelativePrec = 20   ' à la même hauteur que l'impression précédente
     
            TableAImprimer(11).Texte = Final_datas.Lab_collar_depth.Text
            TableAImprimer(11).Police = Final_datas.Lab_collar_depth.Font   '
            TableAImprimer(11).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(11).Valeur_Y_RelativePrec = 20   ' à la même hauteur que l'impression précédente
     
            TableAImprimer(12).Texte = Final_datas.Lab_shoe_depth.Text
            TableAImprimer(12).Police = Final_datas.Lab_shoe_depth.Font   '
            TableAImprimer(12).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(12).Valeur_Y_RelativePrec = 0  ' à la même hauteur que l'impression précédente
     
            TableAImprimer(13).Texte = Final_datas.Lab_shoe_track_lenght.Text
            TableAImprimer(13).Police = Final_datas.Lab_shoe_track_lenght.Font   '
            TableAImprimer(13).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(13).Valeur_Y_RelativePrec = 20  ' à la même hauteur que l'impression précédente
     
     
            '******************Open Hole **********************
     
            TableAImprimer(14).Texte = Final_datas.lb_int_vol_OH.Text
            TableAImprimer(14).Police = Final_datas.lb_int_vol_OH.Font   '
            TableAImprimer(14).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(14).Valeur_Y_RelativePrec = 100   ' à la même hauteur que l'impression précédente
     
            TableAImprimer(15).Texte = Final_datas.Lb_TD_MD.Text
            TableAImprimer(15).Police = Final_datas.Lb_TD_MD.Font   '
            TableAImprimer(15).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(15).Valeur_Y_RelativePrec = 20   ' à la même hauteur que l'impression précédente
     
            TableAImprimer(16).Texte = Final_datas.Lb_TD_TVD.Text
            TableAImprimer(16).Police = Final_datas.Lb_TD_TVD.Font   '
            TableAImprimer(16).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(16).Valeur_Y_RelativePrec = 0  ' à la même hauteur que l'impression précédente
     
            TableAImprimer(17).Texte = Final_datas.Lb_lg_OH.Text
            TableAImprimer(17).Police = Final_datas.Lb_lg_OH.Font   '
            TableAImprimer(17).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(17).Valeur_Y_RelativePrec = 20  ' à la même hauteur que l'impression précédente
     
     
            '********************Cement volume************************
     
            TableAImprimer(18).Texte = Final_datas.Lb_vol_lead.Text
            TableAImprimer(18).Police = Final_datas.Lb_vol_lead.Font   '
            TableAImprimer(18).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(18).Valeur_Y_RelativePrec = 100   ' à la même hauteur que l'impression précédente
     
            TableAImprimer(19).Texte = Final_datas.Lb_vol_excess_lead.Text
            TableAImprimer(19).Police = Final_datas.Lb_vol_excess_lead.Font   '
            TableAImprimer(19).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(19).Valeur_Y_RelativePrec = 0   ' à la même hauteur que l'impression précédente
     
            TableAImprimer(20).Texte = Final_datas.Lb_vol_tail.Text
            TableAImprimer(20).Police = Final_datas.Lb_vol_tail.Font   '
            TableAImprimer(20).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(20).Valeur_Y_RelativePrec = 20  ' à la même hauteur que l'impression précédent
     
            TableAImprimer(21).Texte = Final_datas.Lb_vol_excess_tail.Text
            TableAImprimer(21).Police = Final_datas.Lb_vol_excess_tail.Font   '
            TableAImprimer(21).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(21).Valeur_Y_RelativePrec = 0  ' à la même hauteur que l'impression précédente
     
            '*********************Displacement********************
     
            TableAImprimer(22).Texte = Final_datas.Lab_vol_shoe_track.Text
            TableAImprimer(22).Police = Final_datas.Lab_vol_shoe_track.Font   '
            TableAImprimer(22).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(22).Valeur_Y_RelativePrec = 100   ' à la même hauteur que l'impression précédente
     
            TableAImprimer(23).Texte = Final_datas.Lab_half_ST.Text
            TableAImprimer(23).Police = Final_datas.Lab_half_ST.Font   '
            TableAImprimer(23).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(23).Valeur_Y_RelativePrec = 0   ' à la même hauteur que l'impression précédente
     
            TableAImprimer(24).Texte = Final_datas.lab_vol_int_csg_to_fc.Text
            TableAImprimer(24).Police = Final_datas.lab_vol_int_csg_to_fc.Font   '
            TableAImprimer(24).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(24).Valeur_Y_RelativePrec = 20  ' à la même hauteur que l'impression précédent
     
            TableAImprimer(25).Texte = Final_datas.Lab_str_displ.Text
            TableAImprimer(25).Police = Final_datas.Lab_str_displ.Font   '
            TableAImprimer(25).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(25).Valeur_Y_RelativePrec = 0   ' à la même hauteur que l'impression précédente
     
            TableAImprimer(26).Texte = Final_datas.Lb_diplac_max.Text
            TableAImprimer(26).Police = Final_datas.Lb_diplac_max.Font   '
            TableAImprimer(26).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(26).Valeur_Y_RelativePrec = 20  ' à la même hauteur que l'impression précédent
     
            TableAImprimer(27).Texte = Final_datas.Lab_str_displ_max.Text
            TableAImprimer(27).Police = Final_datas.Lab_str_displ_max.Font   '
            TableAImprimer(27).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(27).Valeur_Y_RelativePrec = 0  ' à la même hauteur que l'impression précédent
     
            '********************* casing 2 ****************
     
     
            TableAImprimer(28).Texte = Final_datas.Lb_csg2_size.Text
            TableAImprimer(28).Police = Final_datas.Lb_csg2_size.Font   '
            TableAImprimer(28).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(28).Valeur_Y_RelativePrec = 300  ' à la même hauteur que l'impression précédent
     
            TableAImprimer(29).Texte = Final_datas.Lb_csg2_weight.Text
            TableAImprimer(29).Police = Final_datas.Lb_csg2_weight.Font   '
            TableAImprimer(29).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(29).Valeur_Y_RelativePrec = 0  ' à la même hauteur que l'impression précédent
     
            TableAImprimer(30).Texte = Final_datas.Lb_csg2_int_vol.Text
            TableAImprimer(30).Police = Final_datas.Lb_csg2_int_vol.Font   '
            TableAImprimer(30).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(30).Valeur_Y_RelativePrec = 150  ' à la même hauteur que l'impression précédent
     
            TableAImprimer(31).Texte = Final_datas.Lb_csg2_int_vol.Text
            TableAImprimer(31).Police = Final_datas.Lb_csg2_int_vol.Font   '
            TableAImprimer(31).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(31).Valeur_Y_RelativePrec = 0  ' à la même hauteur que l'impression précédent
     
            TableAImprimer(32).Texte = Final_datas.Lb_csg2_ext_vol.Text
            TableAImprimer(32).Police = Final_datas.Lb_csg2_ext_vol.Font   '
            TableAImprimer(32).Valeur_X_Rect = 50 '100 unités à droite de la 1ère position possible
            TableAImprimer(32).Valeur_Y_RelativePrec = 30  ' à la même hauteur que l'impression précédent
     
            TableAImprimer(33).Texte = Final_datas.Lab_csg2_int_dia.Text
            TableAImprimer(33).Police = Final_datas.Lab_csg2_int_dia.Font   '
            TableAImprimer(33).Valeur_X_Rect = 350 '100 unités à droite de la 1ère position possible
            TableAImprimer(33).Valeur_Y_RelativePrec = 0  ' à la même hauteur que l'impression précédent
     
     
     
     
     
     
     
     
     
     
     
        End Sub
     
            Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
     
                Dim Ligne As String
                Dim Position As System.Drawing.PointF
                Dim Rectangle As RectangleF
                Dim Police As Font
                Dim HauteurLigne As Single = 0
                Dim PositionYPrec As Single = 0
                Static IndiceTable As Integer = 0
     
                If IndiceTable = 0 Then
                    PrepareImpression()
                End If
     
                Do
                    Police = TableAImprimer(IndiceTable).Police
                    Ligne = TableAImprimer(IndiceTable).Texte
                    If TableAImprimer(IndiceTable).Valeur_Y_RelativePrec > 0 Then
                        PositionYPrec += TableAImprimer(IndiceTable).Valeur_Y_RelativePrec + HauteurLigne
                    Else
                        PositionYPrec += TableAImprimer(IndiceTable).Valeur_Y_RelativePrec
                    End If
                    HauteurLigne = Police.GetHeight(e.Graphics)
                    Position = New PointF(TableAImprimer(IndiceTable).Valeur_X_Rect, PositionYPrec)
                    Rectangle.Location = Position
     
                    If Position.Y + HauteurLigne > e.MarginBounds.Height Then
                        e.HasMorePages = True
                        Exit Sub
                    Else
                        e.HasMorePages = False
                    End If
                    e.Graphics.DrawString(Ligne, Police, Brushes.Black, Rectangle)
                    IndiceTable += 1
     
                Loop Until TableAImprimer(IndiceTable).Texte = String.Empty
            End Sub
        End Class

  19. #19
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bravo !!!


    Et bien si tu peux composer avec mon algo et que tu es content du résultat que tu obtiens, alors je n'ai rien à corriger, vaut même mieux ne plus y toucher ...

    Cependant, telle quelle, la classe impression permet l'impression du texte. Si tu veux tirer un trait après une ligne de données, ou bien placer là une image, rien ne te le permet.

    Je me propose donc de mettre en place un système de codes sur base desquels serait fait le choix de l'impression souhaitée dans _PrintPage. Je dois tester un peu ...

  20. #20
    Membre confirmé
    Homme Profil pro
    Drilling enginer
    Inscrit en
    Décembre 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Drilling enginer
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 123
    Par défaut
    avec plaisirs, car je voulais insérer un tableau pour récapituler les temps/volume de pompage, et donc je pensais à éditer les lignes grâce a power pack, ou alors des labels qui contiendrais de "-" ou des "_" enfin tu vois le bricolage .....

    mais si tu as un moyen !!!

Discussions similaires

  1. problème d'impression
    Par davedenice dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 28/07/2005, 16h57
  2. [PowerBuilder] Problème d'impression datawindow composite
    Par jpdar dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 17/05/2005, 13h33
  3. Réponses: 16
    Dernier message: 17/03/2005, 13h54
  4. [Rave] problème d'impression
    Par romstarr dans le forum Rave
    Réponses: 2
    Dernier message: 09/06/2004, 15h48
  5. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo