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

Windows Forms Discussion :

[VB6 à NET] Impression


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 109
    Points : 68
    Points
    68
    Par défaut [VB6 à NET] Impression
    Pour mon stage, je dois passer ce code en VB.NET mais je n'arrive pas à tout comprendre ce qu'il veut faire....

    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
    Tableau_cde.MousePointer = 11
        Printer.ScaleMode = 1 'en Twips
                   hauteur_tot = Printer.ScaleHeight
     
            Printer.ScaleMode = 6 'en mm
            largeur_mm = Printer.ScaleWidth
            hauteur_mm = Printer.ScaleHeight
     
            Printer.ScaleMode = 1'en twips
            largeur = Printer.ScaleWidth - decal_imp_x
            hauteur_tot = Printer.ScaleHeight
     
            unite = hauteur_tot / hauteur_mm
            unite_x = Printer.ScaleWidth / largeur_mm
     
            decal_imp_x = unite_x * 8
            largeur = Printer.ScaleWidth - decal_imp_x
            largeur_imp = unite_x * 175
            ' on décale l'impression sur la droite
            Printer.ScaleLeft = -decal_imp_x
     
            decal_courbe_x = unite_x * 8
            decal_courbe_y = unite * 130 '124
            hauteur_imp = unite * 120 '132
            Printer.ForeColor = &H0
    Qu'est ce que vous en pensez??
    En VB.NET on a plus du tout de twips ni de millimetre, on est en centieme de pouce et en millieme de millimetre! Je perd completement pied!
    Je crois que j'ai besoin de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (PrinterUnitConvert.converte.marginbounds.width,PrinterUnit.thousandthsofaninch,PrinterUnit.thenthsofamillimeter)
    Si quelqu'un comprend exactement ce qu'il veut faire dans son code ou comment je peux obtenir un resultat similaire...
    merci mille fois

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    Je n'arrive pas à avancer avec ça
    heureusement que j'ai plein d'autre choses à faire aussi

    Vous comprenez pas non plus son code?

    Autre question: est il plus facile en VB.NET de mettre dans un fichier ce que l'on veut imprimer puis imprimer le document ou d'écrire ligne par ligne directement ce que l'on veut imprimer avec e.Graphics.DrawString() ?
    merci encore!

  3. #3
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Salut, je ne sais pas si çà vaut le coup de traduire ce code; tu peux faire directement aussi bien(mieux même) avec VB.Net et sa Classe
    PrintDocument
    Si tu veux tout de même une aide pour passer de Printer à PrintDocument
    Modifications de l'objet Printer dans Visual Basic .NET
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  4. #4
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    Citation Envoyé par debutanteVB.NET
    Autre question: est il plus facile en VB.NET de mettre dans un fichier ce que l'on veut imprimer puis imprimer le document ou d'écrire ligne par ligne directement ce que l'on veut imprimer avec e.Graphics.DrawString() ?
    ca depend de ce que tu veux imprimer. si c'est pour imprimer un texte barbare, le drawstring est pas le plus adequat.
    Si comme moi, tu dois imprimer des images, des datagridview (miam), des graphics ou mieux, le tout sur la meme page, alors le dessin à la main est plus "simple"
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    Heureusement j'ai un exemple d'impression de ce que le gars voulait faire...donc je vais "regler" à l'oeil ce que son code veut dire...
    Du texte et un graphe, ça sera faisable...C'est bizzare que VB.NET ne gere ça pas plus facilement(plus rapidement surtout)...qd je serai grande, je trouverai une bonne solution!lol

    et si...Juste une idée comme ça...si on veut imprimer une form telle quelle (c'est à dire mettre plein de label placés là où on veut imprimer avec donc dans le code le texte suivant la langue par exemple). Il y a un moyen simple d'imprimer la form? ou il faut qd meme passer par e.Graphics.DrawString() ?

    Merci de votre aide.
    à plush!

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Ben ya la solution VSTO ou tu pilotes directement OFFice
    Pharaonix et Frechy sont les chefs dans ce domaine en ce moment
    + http://jab.developpez.com/CSharp/Word/
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    Merci.
    J'ai trouvé aussi une autre solution:
    Pour imprimer le formulaire en cours:
    Il faut mette un PrintDocument dans la form puis...


    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
    Private Declare Function BitBlt Lib "gdi32.dll" Alias "BitBlt" (ByVal _
       hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As _
       Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal _
       hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, _
       ByVal dwRop As System.Int32) As Long
    Dim memoryImage As Bitmap
    Private Sub CaptureScreen()
       Dim mygraphics As Graphics = Me.CreateGraphics()
       Dim s As Size = Me.Size
       memoryImage = New Bitmap(s.Width, s.Height, mygraphics)
       Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
       Dim dc1 As IntPtr = mygraphics.GetHdc
       Dim dc2 As IntPtr = memoryGraphics.GetHdc
       BitBlt(dc2, 0, 0, Me.ClientRectangle.Width, _
          Me.ClientRectangle.Height, dc1, 0, 0, 13369376)
       mygraphics.ReleaseHdc(dc1)
       memoryGraphics.ReleaseHdc(dc2)
    End Sub
    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, _
       ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
       PrintDocument1.PrintPage
       e.Graphics.DrawImage(memoryImage, 0, 0)
    End Sub
    Private Sub PrintButton_Click(ByVal sender As System.Object, ByVal e As _
       System.EventArgs) Handles PrintButton.Click
       CaptureScreen()
       PrintDocument1.Print()
     End Sub

    Dans la form j'ai crée des labels et une imageBox pour mettre en page facilement le text que je veux imprimer!
    Bisous!
    A bientôt!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    1.J'ai un seul petit hic avec ma solution... ça m'imprime aussi la barre de tache de windows...
    Quelqu'un aurait une solution? du genre obliger la barre à se cacher grâce à une commande en VB...(mon programme sera executé sur plusieurs ordi (même en Chine!) donc je peux pas juste l'enlever sur le mien...

    2.J'ai encore du mal à trouver la bonne taille de ma form pour qu'elle soit imprimée pile poile pour une feuille A4 (et j'espère qu'on ne me demanderas pas aussi un autre format!)

    Merci encore et toujours pour votre aide! Dès fois, je sais pas comment je ferai sans vous!

  9. #9
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Tu devrais pouvoir piloter la Taskbar avec les API :
    • SetWindowLong
      CallWindowProc
      FindWindow
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    Par contre, j'ai un autre problème du même genre...
    si je change la resolution de mon ordi (ou si je tourne sur un ordi avec un ecran plus petit) ça m'imprime que la moitié du document!!

    J'ai quelques idées pour résoudre le problème mais je sais même pas si ça existe:
    °Peut on mettre des labels et des images dans un conteiner imprimable par e.Graphics.DrawQUELQUE-CHOSE?
    °Ou peut etre ne pas passer par une capture d'ecran mais par une capture de form? (ça m'enerve j'ai presque fini la form que je veux imprimer)
    °sinon quitte à recommencer, il y a til un moyen simple de placer ces element en passant par du code...(c'était tellement plus simple de passer par une form) par exemple pour un saut à la ligne il faudrai augmenter de combien?(dans les 10 daprès mes essaies mais je sais pas si ça depend de l'ecran)

    Bon ben j'espère que vous aurez de meilleur idées que moi...
    Merci et à bientôt

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    Finalement je suis revenue à la façon traditionnelle mais j'ai un probleme:

    1.Lorsque je lance l'impression la boite de Apperçu avant impression s'affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim dllg As New PrintPreviewDialog
    dllg.Document = pd
    dllg.ShowDialog()
    mais j'essaye de tester si l'utilisateur appuie sur imprimer ou sur annuler car dans les deux cas ça m'imprime!
    J'essaie avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim result As DialogResult = dllg.ShowDialog()
            If (result = System.Windows.Forms.DialogResult.OK) Then
    mais ça marche pas.

    Vous pouvez m'aider

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    j'ai aussi deux autre problemes avec ça...decidement cette impression traine en longueur...

    2.je souhaite que la fenetre d'apperçu apparraisse d'entrée plus grande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dllg.Size = dllg.MaximumSize
    mais apparament c'est pas comme ça.

    3.l'impression n'est pas exactement ce que m'affiche l'apperçu. J'ai fait pas mal de modif avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.PageSettings.Margins.Left = 1
    et je me demande si c'est pas à cause de ça.

    Personne n'aurait un exemple d'impression qui marche comme il faut?
    L'exemple du site n'est pas assez precis...
    Merki

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    le 2. je l'ai resolu...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dllg.WindowState = FormWindowState.Maximized
    J'y avais pas pensé

    Si vous savez pour le reste, ou vous trouvez avant moi 8)
    lol

  14. #14
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par debutanteVB.NET
    mais j'essaye de tester si l'utilisateur appuie sur imprimer ou sur annuler car dans les deux cas ça m'imprime!
    J'essaie avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim result As DialogResult = dllg.ShowDialog()
            If (result = System.Windows.Forms.DialogResult.OK) Then
    Essayes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim result As DialogResult = dllg.ShowDialog(Me)
    If Not(result = System.Windows.Forms.DialogResult.Cancel) Then
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    Merci il y a du progrès dans le sens que quand je clique sur Fermer il n'imprime plus.
    Mais lorsque j'appuie sur le bouton imprimante, il veut pas m'envoyer sur le choix de l'imprimante mais imprime directement.Et le bouton Fermer ne m'imprime plus mais ne ferme pas pour autant la fenetre...
    Voici 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
     
            dllg.Document = pd
            dllg.WindowState = FormWindowState.Maximized
            dllg.ShowDialog()
     
            Dim result1 As DialogResult = dllg.ShowDialog(Me)
    'test dans aperçu
            If Not (result1 = System.Windows.Forms.DialogResult.Cancel) Then
                'choix imprimante
                Dim dlg As New PrintDialog
                dlg.Document = pd
                Dim result As DialogResult = dlg.ShowDialog()
    'test dans choix imprimante
                If (result = System.Windows.Forms.DialogResult.OK) Then
                    MsgBox("c'est lancé")
                    '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    'pd.Print() 'A AJOUTER
                            End If
             Else
                Exit Sub 'ou même me.close
     
            End If
    Je comprend pas pourquoi ça marche pas.

    PS:petite question subsidiere, où je peux trouver une image pour un Aperçu avant impression, il y en a pas dans word...

  16. #16
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Le plus simple serait de laisser faire les choses automatiquemnt sans chercher à recupérer les result
    Sinon pour ton image Aperçu çà m'etonnerai que tu ne trouves pas sur sur internet
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  17. #17
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    Dim result As DialogResult = dllg.ShowDialog()
    If (result = System.Windows.Forms.DialogResult.OK) Then
    rassure toi, j'ai exactement le meme probleme, meme avec le framework 2.

    a savoir: printpreviwdialog, ne renvoi jms de dialogresultOk, il imprime directement sur l'imprimante par defaut et aucun personnalisation possible.
    solution, prevoir un bouton apercu et un bouton imprimer
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 109
    Points : 68
    Points
    68
    Par défaut
    les grand esprits se rencontrent, c'est ce que j'avais fini par faire même si ce n'est pas dans le "cahier de charges"...

    pour l'image, j'ai bien galeré, pas d'immage "aperçu" nul part.J'ai fini par trouver en regardant une à une les images de sites (désolée je sais plus du coup où j'ai fini par la prendre-si je me rapel je laisserai l'adresse)

    Mon seul soucis reste la mise en page.Si quelqu'un connait une solution simple pour placer ses elements...
    Dans l'aperçu d'impression, à l'impression et en pdf ça donne pas le meme resultat...

    enfin si ce soir j'ai pas trouvé, je considère que c'est bon, c'est pas top mais c'est lisible... vs en fetez pas je penserai au tag

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR][ASP.NET] Impression sur imprimante partagée
    Par Frusciante8 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 27/01/2005, 12h03
  2. [VB6+API][Impression] Mise en page
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 06/09/2004, 17h11
  3. [CR10][ASP.NET]Impression sur le poste Client
    Par David.V dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 30/04/2004, 13h41
  4. [CR][ASP.NET] Impression en format "paysage"
    Par David.V dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 24/04/2004, 22h56
  5. [VB.NET] impression d'un datagrid
    Par behe dans le forum Windows Forms
    Réponses: 3
    Dernier message: 13/01/2004, 09h59

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