Imprimer sous VB.Net; questions multiples

Résolu
ORTHROS Messages postés 2 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 24 septembre 2005 - 24 sept. 2005 à 13:55
felsfr Messages postés 25 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 décembre 2005 - 24 sept. 2005 à 22:50
Problème 1


J'utilise VB.Net et pour l'impression la syntaxe e.Graphics.DrawString(….)


Malheureusement, le texte à imprimer ne contient pas sur une seule page et j'ai beau chercher, je n'arrive pas à trouver la syntaxe permettant de passer automatiquement à la page suivante lorsque le texte est hors limite du document.


Pour l'instant j'utilise l'astuce qui consiste à constituer autant de String que nécessaire pour imprimer ces string sur différents documents grâce à If "la string 1 a N lignes" then "on remplit la string 2 pour l'imprimer sur le doc 2" …. Etc.


Je trouve ça très lourd et ça m'agace. Si quelqu'un pouvait me donner le code permettant de passer l'impression automatiquement sur la page suivante, ça serait sympa.




Problème 2


Mon deuxième soucis est l'impossibilité (du moins je le suppose) de ne pas pouvoir modifier par visualisation avant impression le document à imprimer. En outre, le document imprimé ne peut pas être Save pour être ré ouvert comme le ferait un DocumentWord.doc


Peut-être seriez-vous capable de me donner des astuces à ce sujet ?




Problème 3


Je me suis donc naturellement intéressé à l'impression sur Word


Après avoir lu diverses choses sur le forum, j'ai trouvé comment insérer des variables grâce aux signets. Cependant il y a un truc qui m'énerve : lorsque Word est déjà ouvert, le document suivant est correctement créé mais la fenêtre reste dans la barre d'outil et elle ne s'ouvre pas automatiquement pour se mettre en premier plan. Un clic est donc nécessaire pour voir le doc. Y a-t-il moyen de forcer cette fenêtre à se mettre en premier plan ?




Problème 4


Toujours sur Word, je développe sous Word 2002 et je dois me débrouiller pour que l'impression fonctionne aussi sous Word 1997. Conformément à ce que j'ai lu, j'ai remplacé


"Ref Word"


"Dim Word as new Word.Application"


par


Dim Word as new Object


"Word = CreateObject("Word.Application")"


Quid alors de l'insertion des signets et notamment de "Dim objrange As Word.Range" ?






Je vous remercie d'avance des réponses que vous pourriez apporter et qui, je l'espère, seront suffisamment claire pour mon niveau de compréhension. En effet, j'ai appris le VB cet été en lisant "VB.Net pour les Nuls". Vous ne serez donc pas étonné par le niveau "débutant-plancher" de mes questions.

4 réponses

felsfr Messages postés 25 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 décembre 2005
24 sept. 2005 à 17:27
Probleme 1


Dans ta procedure appelante

Private Sub etc..........//////


'on suppose que tu as une liste de films selon le format
'titre_a_imprimer(nr_film)
'de titre_a_imprimer(0) à titre_a_imprimer(X)
'et tu veux imprimer un titre de film par ligne

PrintPreviewDialog1.Document = PrintDocument1

nr_film = 0
'n° du 1er film à afficher
nombre_films=X-1 'le nombre total de film à imprimer
PrintPreviewDialog1.ShowDialog()



End
Sub



Private
Sub PrintDocument1_PrintPage(
ByVal sender
As System.Object,
ByVal e
As System.Drawing.Printing.PrintPageEventArgs)
Handles PrintDocument1.PrintPage


Dim align_centre
As
New StringFormat
align_centre.Alignment = StringAlignment.Center

Dim position_Y_mini
As
Integer = 0 'ta marge haute

Dim position_X
As
Integer = 0
'ta marge gauche
Dim position_Y
As
Integer = 0

Dim ligne_actuelle
As
Integer = 0 'la 1ere ligne de la page

Dim lignes_par_page
As
Integer = 54 'nombre de lignes par page(en fait tu calcules en fonction de la police)

Dim interligne
As
Integer = 5 ' en fonction de la police aussi, ici c'est un exemple

Dim police_taille
As
Integer = 10

'tant qu'on ne depasse pas le bas de page et qu'il reste des données a imprimer
While (ligne_actuelle < lignes_par_page)
And (nr_film < nombre_films)

'on calcule le Y de la ligne à afficher
position_Y = position_Y_mini + (interligne * ligne_actuelle)

'on affiche le titre du film
e.Graphics.DrawString(titre_a_imprimer(nr_film),
New Font("arial", police_taille), Brushes.Black, position_X , position_Y , Align_centre)

'on passe au film suivant
nr_film = nr_film + 1

'qu'on affichera sur la ligne suivante
ligne_actuelle = ligne_actuelle + 1

End
While

'on a atteint le nombre de ligne max
'on regarde s'il y a encore des films (donc une autre page)
If nr_film < nombre_films
Then
e.HasMorePages =
True 'il reste des pages
Else
e.HasMorePages =
False 'plus de pages
'on réinitialise les variables transmises avant le preview
'car si on print depuis l apercu, les variables ne sont
'pas réiniatilsées
nr_film = 0
'n° du 1er film à afficher
End
If

End
Sub
3
felsfr Messages postés 25 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 décembre 2005
24 sept. 2005 à 22:50
Effectivement, pas de saut de page automatique puisque l'on est en mode graphique, tout ce qui est hors des limites de la feuille n'est pas imprimé. Mais bon ce système autorise des mises en page complexes, les coordonnées étant en 100eme de pouce.

Quant au problème 2, il est effectivement impossible de modifier le document par visualisation avant impression. La solution serait peut être de créer ton propre aperçu dans un RichTextBox si tu n'utilise que du texte ?


3
felsfr Messages postés 25 Date d'inscription mardi 1 mars 2005 Statut Membre Dernière intervention 13 décembre 2005
24 sept. 2005 à 17:33
Petite erreur, il faut lire nombre_films=X+1 (de 0 à X en fait) mais je ne sais pas si on peux éditer un Post


'on suppose que tu as une liste de films selon le format
'titre_a_imprimer(nr_film)
'de titre_a_imprimer(0) à titre_a_imprimer(X)
'et tu veux imprimer un titre de film par ligne
PrintPreviewDialog1.Document = PrintDocument1

nr_film = 0
'n° du 1er film à afficher
nombre_films=X-1 'le nombre total de film à imprimer
PrintPreviewDialog1.ShowDialog()



End
Sub
0
ORTHROS Messages postés 2 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 24 septembre 2005
24 sept. 2005 à 22:04
Merci pour la réponse à mon problème n°1, e.HasMorePages = True, c'est effectivement plus cool que mon usine à gaz;

Ce qui me chagrine un peu c'est qu'apparemment, il n'y a pas de saut de page automatique puisqu'on doit tout de même calculer le nombre de ligne ce que je faisais déjà .
0
Rejoignez-nous