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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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

  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
    Pas de problème, ce n'était qu'une suggestion.

    A bientôt,

    Phil

  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
    nos messages se sont croisés , car je m'obstine ....

  4. #4
    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 ?
    ...

  5. #5
    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.

  6. #6
    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
    Nos messages de 15h31 se sont croisés


    Nous pouvons utilisez les 2 modes d'impressions dans un premier temps.


    Dans final_datas.vb, le PrintPreviewToolStripMenuItem_Click permet le Preview qui permet (par son bouton) d'imprimer avec PrintDocument1_PrintPage.
    Dans final_datas.vb, le PrintToolStripMenuItem_Click peut être réutilisé comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub PrintToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PrintToolStripMenuItem.Click
            impression.ImprimeAvecWord()
        End Sub
    Bien entendu, dans impression.vb, tu dois écrire la procédure Friend Sub ImprimeAvecWord().

    Voici cette procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Friend Sub ImprimeAvecWord()
    GoToWord()
    End Sub
    Et bien entendu, dans impression.vb, tu écris la procédure Private Sub GoToWord().

    Dans cette procédure, comme dans celle que je t'ai envoyée, ça commence comme ceci :

    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
       Private Sub GoToWord()
            Dim WAPP As New Microsoft.Office.Interop.Word.Application
            Dim UnDoc As New Microsoft.Office.Interop.Word.Document
            Dim Table As Microsoft.Office.Interop.Word.Table
     
             ' Travailler avec un double (FImpresion) du fichier pour ne pas modifier l'original
            Dim Punto As Integer
            Punto = ArchivoPrimeroParaImpresion.LastIndexOf(".")   ''' Je vois que j'ai oublié de traduire quelques détails ... :D)))
            Dim FImpresion As String = ArchivoPrimeroParaImpresion.Substring(0, Punto) & "_" & Trim(Now.Millisecond) & ".Docx"
            System.IO.File.Copy(ArchivoPrimeroParaImpresion, FImpresion)
     
            ' Ouvrir le fichier FImpresion et traiter
            UnDoc = WAPP.Documents.Open(FImpresion)
            WAPP.Visible = True
     
            ' ***  Remplir le document (exemple)
     
            Table = UnDoc.Tables(1)  ' Les tables sont indiciées de 1 à N, si N tables
            ' Dans une table, les données accédées par les indices des lignes et des colonnes :
            ' Table.Cell(Ligne, Colonne).Range.Text = ...     ' Ligne de 1 à N lignes et Colonne de 1 à N colonnes
            ' Si une seule cellule, c'est en ligne 1 et colonne 1
            Table.Cell(1, 1).Range.Text = ... ... ...  selon ce que tu dois écrire, par exemple :   TableAImprimer(0).Texte
    ... ... ...
    Quand tu auras démarré cette programmation, si tu as des difficultés, envoye-moi le code de impression.vb et ton doc de base, que je puisse tester ...

    ...

  7. #7
    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
    Ça avance, lentement, mais avance, le code est intégré et je n'ai plus de message d'erreur, la page word est créé, et je n'arrive à remplir que les 2 tables d'une seule cellule que j'ai créé, je n'arrive pas à remplir le tableau, il ne plante pas mais ne remplit pas non plus !?
    .......
    Je crois savoir ou je m.....e, je suis parti de ton exemple avec le datagrid, alors que je devrais partir de TableAImprimer(…).Texte seulement je n'ai pas la moindre idée ou la trouver ????

  8. #8
    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 ...

  9. #9
    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

  10. #10
    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

  11. #11
    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

  12. #12
    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,

    J’ai fait un exemple qui ne correspond sûrement pas à ta manière de présenter les données …

    Le fichier de base est mesdatasExemple.docx (à copier dans … Bin\Debug). Voici ce à quoi il ressemble avant exécution :
    Nom : mesdatasExemple.jpg
Affichages : 187
Taille : 23,4 Ko

    Le premier tableau contient 3 cellules sans traits de séparations. VB y place des infos en colonne 1 et en colonne 3. En colonne 2, le slashe est placé dans Word.

    Le deuxième tableau contient 2 colonnes et la première ligne contient les titres des colonnes en taille un peu plus grande et en caractères gras.
    VB place les valeurs à partir de la 2ème ligne et ajoute les lignes au fur et à mesure des besoins. C’est bien entendu ici que ça ne correspond pas à ta façon de présenter les données … La difficulté vient du fait que tes Label contiennent à la fois le libellé et la valeur (ordinairement, on utilise 2 zones distinctes pour y placer 2 textes distincts : le libellé et la valeur).

    En pièce jointe, Pierrelec.zip contient les codes complets de final_datas.vb et de impression.vb, ainsi que mesdatasExemple.docx .
    A l’exécution, dans le menu de final_datas, c’est Print qui commande l’impression par Word. La procédure GotoWord est commentée.


  13. #13
    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
    Ecoute, je ne sais pas comment te remercier, même si ça ne correspond pas, dans la mise en page à ce que je voudrais, la modification va être facile, et surtout CA MARCHE !!!!


    Me reste maintenant à faire une version 6 plus intuitive et ce sera pas mal du tout !

    encore merci.


    Pierre

  14. #14
    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,


    TableAImprimer(…) est dans ton programme, dans impression.vb, c'est la procédure que tu as du remplir, où tu as exagéré les espaces pour obtenir un saut de page ...

    Pour ce qui est d'imprimer plusieurs lignes dans un tableau qui a été créé avec peu de lignes (ce qui est normal), il faut ajouter les lignes quand on en a besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    '...
            Table.Rows.Add()
            L += 1    ' L est l'indice utilisé pour les lignes
            Table.Cell(L, 1).Range.Text = ""   ' dans cet exemple, on vide la cellule de la colonne 1, de la ligne L.
    '...

    ...

  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
    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 ...

  16. #16
    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 !!!

  17. #17
    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


    Si je peux me permettre ...

    Pourquoi ne séparerais-tu pas les libellés et les valeurs sur tes écrans ? Cela ne devrait pas être trop difficile puisqu'il en est ainsi dans ta DB.

    Tu pourrais ensuite remplir la TableAImprimer() comme ceci (ce n'est qu'une illustration) :

    TableAImprimer(2).Texte = "Le texte du libellé qui vient là"
    TableAImprimer(2).Police = ...
    TableAImprimer(2) ...X... = ...
    TableAImprimer(2) ...Y... = ...


    TableAImprimer(3).Texte = "Le texte de la valeur pour le libellé qui est à côté (le 2)"
    TableAImprimer(3) ... = ...
    TableAImprimer(3) ... = ...
    TableAImprimer(3) ... = ...

    et ainsi de suite, les indices pairs (4, 6, ... ) concernant les libellés et les impairs concernant les valeurs correspondantes.

    Pour l'impression directe, toutes les lignes de la TableAImprimer() sont utiles.

    Pour l'impression via Word, les lignes de la TableAImprimer() qui concernent les valeurs X et Y sont inutiles et 2 situations sont à envisager :
    1. soit tu as écrit les libellés dans le doc de base, alors seules les lignes de la TableAImprimer(IndiceImpair).Texte sont utiles;
    2. soit tu n'as pas écrit les libellés dans le doc de base, alors toutes les lignes de la TableAImprimer().Texte sont utiles, et éventuellement les lignes TableAImprimer().Police.


    A toi de voir ...

    Passe une excellente journée

  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
    il aurait meme plus simple, la mise en page Word sera toujours la meme, pourquoi ne pas mettre une fois pour toute les libéllés dans la mise en page word et ne lui faire que remplir que les valeurs !!

  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
    C'est pas très satisfaisant parce que les espaces occupés sur le papier ne sont pas gérés comme avec les textes. Les lignes et images doivent donc être imprimées en positions absolues (ne mémorise pas la position X pour l’impression suivante et attention au saut de page).

    Mais ça permet de continuer avec la table des données à imprimer et d'imprimer dans une boucle.

    Voici le code de la procédure _PrintPage et une illustration des insertions faites dans PrepareImpression pour tester.
    Attention, si tu places effectivement des impressions de lignes et d'images, il te faut corriger tous les autres indices de la table.

    Je te laisse tester et je pourrai te donner des explication demain après-midi (si nécessaire).

    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
        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
     
            Dim SeparateurSplit As Char() = {"~"}
            Dim LesValeurs() As String
     
            If IndiceTable = 0 Then
                PrepareImpression()
            End If
     
            Do
                Select Case TableAImprimer(IndiceTable).Texte.Substring(0, 6)  ' les 6 premiers caractères
                    Case "~~~~~~"  ' Choix du caractère ASCII 126 comme caractère "spécial", séparateur de données.
                        ' Rien à faire (donnée nulle pour faire "tampons" dans la table TableAImprimer
     
                    Case "~LIGNE"  ' chaque ~ suivant exprime une donnée : ~NomCouleur~Epaisseur~X1~Y1~X2~Y2
                        LesValeurs = TableAImprimer(IndiceTable).Texte.Split(SeparateurSplit)
                        Dim Epaisseur As Single = CType(LesValeurs(3), Single)
                        Dim X1 As Integer = CType(LesValeurs(4), Integer)
                        Dim Y1 As Integer = CType(LesValeurs(5), Integer)
                        Dim X2 As Integer = CType(LesValeurs(6), Integer)
                        Dim Y2 As Integer = CType(LesValeurs(7), Integer)
                        Dim Couleur As Color = Color.FromName(LesValeurs(2))
                        Dim Pinceau As New Pen(Couleur, Epaisseur)
     
                        If X2 > e.MarginBounds.Height Then  ' Attention, ici on n'est pas dans le relatif : X1 et X2 doivent tenir sur une même page
                            e.HasMorePages = True
                            Exit Sub
                        Else
                            e.HasMorePages = False
                        End If
     
                        e.Graphics.DrawLine(Pinceau, X1, Y1, X2, Y2)
     
                    Case "~IMAGE"  ' chaque ~ suivant exprime une donnée : ~Nom_et_Chemin_Du_FichierImage~X~Y
                        LesValeurs = TableAImprimer(IndiceTable).Texte.Split(SeparateurSplit)
                        Dim MonImage As Image = Image.FromFile(LesValeurs(2))
                        Dim X As Integer = CType(LesValeurs(3), Integer)
                        Dim Y As Integer = CType(LesValeurs(4), Integer)
     
                        If X + MonImage.Height > e.MarginBounds.Height Then   ' Attention, ici on n'est pas dans le relatif : X + la hauteur de l'image doit tenir sur une même page
                            e.HasMorePages = True
                            Exit Sub
                        Else
                            e.HasMorePages = False
                        End If
     
                        e.Graphics.DrawImage(MonImage, X, Y)
     
                    Case Else
                        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)
     
                End Select
     
                IndiceTable += 1
     
            Loop Until TableAImprimer(IndiceTable).Texte = String.Empty
        End Sub

    Nom : CodesImpression.jpg
Affichages : 213
Taille : 164,2 Ko


  20. #20
    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
    Bien évidemment !

    Si tu renonces à l'impression directe que tu règles la mise en page dans Word, la TableAImprimer ne doit plus contenir que les champs .Texte.


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