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

C# Discussion :

Imprimer le contenu de la form


Sujet :

C#

  1. #21
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    Première chose, quand on intègre un code trouvé sur Internet où on copie tout le code d'un module, il faut veiller à utiliser le même espace de noms dans toute l'application (clause NameSpace). Ou alors préfixer les noms des objets se trouvant dans d'autres espaces de noms.

    Deuxième chose, l'application se réfère à des contrôles, il ne faut pas oublier de les créer. Ici il faut un Button qui s'appelle button1, et un PrintDocument qui s'appelle printDocument1.

    Quand je dis première et deuxième c'est dans l'ordre d'importance, mais après avoir créé l'application il convient d'abord de créer les contrôles.

    Pourquoi ? Parce que la création des contrôles va écrire dans plusieurs fichiers, et qu'ensuite le code que tu vas importer va remplacer le contenu d'un de ces fichiers.

    Attention, PrintDocument fait partie de l'espace de noms System.Drawing.Printing, ça fonctionne parce qu'en haut du module se trouve la clause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.Drawing.Printing;
    En tenant compte de ces points, déjà tu devrais ne plus avoir d'erreur de compilation.

    Après il restera à paramétrer le PrintDocument.

    Pendant ce temps je vais restaurer ma machine parce que je me suis laissé entraîner par une application pas tout-à-fait aux normes, et une interface de gestion des droits que je n'ai pas trouvée très explicite.

  2. #22
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    Peut-être convient-il d'ajouter encore quelque chose.

    Une fois que le formulaire est en erreur, Visual Studio ne va pas accepter de l'ouvrir en mode conception, à la place il va afficher une page d'erreur.

    Deux possibilités :
    • créer une nouvelle application (ou au moins un nouveau formulaire) pour repartir de zéro
    • créer les contrôles "à la main"


    Pour la deuxième possibilité, dans Form1.Designer.cs :

    En bas, avant l'accolade qui ferme "partial class Form1", donc la deuxième à partir de la fin, ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            private Button button1;
            private PrintDocument printDocument1;
    En haut, au début de InitializeComponent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                button1 = new Button();
                printDocument1 = new PrintDocument();
    Dans les dernières lignes de InitializeComponent :
    Après, il restera à leur donner des propriétés, mais avec ça tu devrais avoir accès à l'interface de conception.

    Je sèche sur un point, j'ai tenté d'ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Controls.Add(printDocument1)
    et on m'a dit qu'on ne pouvait pas convertir printDocument1 en Control.
    Pour éclairer mon désarroi sur ce point, je précise que ma boîte à outils est vide.

    ***
    À ce stade, il convient encore de double-cliquer sur le bouton en mode de conception, pour créer sa méthode Click().

    Là-dedans il faudra quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                printDocument1_PrintPage(this, new PrintPageEventArgs(this.CreateGraphics(), this.Bounds, this.Bounds, new PageSettings(new PrinterSettings())));
    mais c'est là que j'ai dit tout-à-l'heure qu'il allait falloir paramétrer printDocument1, parce que si tu tapes l'instruction telle quelle tu vas te faire jeter parce qu'un des paramètres est nul.
    Je rappelle que je suis en mode "accroché aux branches".
    D'ailleurs, je n'ai pas relu tout le fil, il est bien possible que la réponse ait été donnée.

    Erratum : le code proposé contenait déjà un button1_Click
    Quand j'ai double-cliqué sur le bouton ça a créé un button1_Click1

    Peut-être n'ai-je pas double-cliqué au bon moment, mais on peut encore se rattraper.
    Par exemple, dans la page des propriétés du bouton, on a accès à l'événement Click, là si on trouve que le _1 de la fin est en trop on peut l'enlever.
    Le défilement avec le triangle à droite peut aider.

  3. #23
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Salut,

    J'ai réussi à imprimer !
    Oura !
    L'erreur venait de moi... mes excuses, du coup j'ai un code allégé (grâce à mes recherches sur le web) :


    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
    private void Impri_Click_1(object sender, EventArgs e)
    {
        Graphics myGraphics = this.CreateGraphics();
        Size s = this.Size;
        printDocument1.DefaultPageSettings.Landscape = true;
        memoryImage = new Bitmap(s.Width, s.Height, myGraphics);
        Graphics memoryGraphics = Graphics.FromImage(memoryImage);
        memoryGraphics.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, s);
        printDocument1.Print();
    }
    Bitmap memoryImage;
     
     
    private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
    {
        e.Graphics.PageScale = 0.5f;
        e.Graphics.DrawImage(memoryImage, 0, 0);
     
    }
    Cependant, oui car il y a souvent un "cependant", l'impression est celle d'une partie de l'écran, pas que de ma Form, et je n'arrive pas à imprimer à l'échelle 1/2 ou 1/3.
    Que je mette 1.0 ou 0.5 ou 1.5 ou autre à e.Graphics.PageScale j'arrive sensiblement à la même chose. On dirait que e.Graphics.PageScale agit sur le positionnement de la fenêtre d'impression et non l'échelle.

    Quelqu'un à une idée ?

    Merci.

  4. #24
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Personne pour m'aider ? Merci.

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Je cherche, je gratte mais ne trouve pas.

    Ma form1 fait 1505x750 et bizarrement this.Size = {Width = 1318 Height = 567}

  6. #26
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 298
    Points : 1 893
    Points
    1 893
    Par défaut
    regarde peut-être du côté de DesktopBounds ou de Bounds https://learn.microsoft.com/fr-fr/do....8.1#remarques

  7. #27
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Bonjour et merci pour cette aide, j'ai travaillé dessus plusieurs soirs mais malheureusement je n'y arrive toujours pas.

  8. #28
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    Bonjour,

    Il faut bien voir qu'imprimer directement un formulaire, c'est un peu comme une copie d'écran : c'est intéressant parce qu'on peut torcher l'affaire en une dizaine de minutes, mais il y a quand même pas mal de cas où on a besoin de quelque chose d'un peu plus paramétrable, où la disposition sur la page n'est pas la même qu'à l'écran.

    Dans ce cas il vaut mieux s'orienter vers des technologies faites pour, comme le ReportViewer, souvent couplé à une base SQL Server, ou les fichiers PDF. Là, bien entendu, il faut être prêt à y passer un peu plus de temps, mais si on considère depuis combien de temps le fil est ouvert ...

    Dans le cas des fichiers PDF, il y a pas mal de monde sur l'affaire, pas tous gratuits aussi. Beaucoup proposent des "périodes gratuites", ce qui signifie que c'est un produit payant.

    J'étais arrivé à quelque chose de pas mal avec un produit qui propose une version gratuite pour jusqu'à dix pages, et ça ça couvre déjà pas mal de besoins.

    Il y a six ou huit mois, avant que ma machine me lâche, j'avais mis en œuvre quelque chose de pas mal. Je vais devoir refaire le projet depuis zéro, et j'ai l'impression que retrouver le produit pour l'impression PDF va représenter une bonne partie du temps à passer dessus.

    codeproject.com est un bon endroit où chercher il me semble, puisque ça s'adresse à des développeurs, ce qui élimine déjà une bonne partie de choses qui n'ont rien à voir.

  9. #29
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Salut,

    Je tente une autre chose.
    Enregistrer une capture d'écran dans un fichier au format .jpg et ensuite imprimer ce fichier.

    Pour enregistrer :

    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 void Impri_Click_1(object sender, EventArgs e)
    {
     
        CaptureMyScreen();
     
    }
     
    private void CaptureMyScreen()
    {
        try
        {
            Bitmap captureBitmap = new Bitmap(1920, 1080, PixelFormat.Format32bppArgb);
            Rectangle captureRectangle = Screen.AllScreens[0].Bounds;
            Graphics captureGraphics = Graphics.FromImage(captureBitmap);
            captureGraphics.CopyFromScreen(captureRectangle.Left, captureRectangle.Top, 0, 0, captureRectangle.Size);
            string exePath = Application.StartupPath;
            captureBitmap.Save(exePath+"/A_Imprimer.jpg", ImageFormat.Jpeg);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    L'image est malheureusement tronquée en horizontal et vertical même si j'agrandis en "new Bitmap(3000, 3000, PixelFormat.Format32bppArgb);"

    Nom : A_Imprimer.jpg
Affichages : 54
Taille : 276,6 Ko

    Aussi il faut que je trouve le moyen d'imprimer cette image...

  10. #30
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    Ah oui, c'est vrai que si ça donne ça, tu as plus intérêt à utiliser PicPick.

    J'ai quatre ou cinq questions en retard, quand je peux je jette un œil.

  11. #31
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Oui, je pourrais aussi utiliser l'outil de capture windows mais bon, j'aurais voulu une solution plus rapide et simple, en un clic.

  12. #32
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    Bon, maintenant que le ravitaillement est fait je peux prendre cinq minutes ...

    J'ai fait un test, et ça ne m'a pas demandé beaucoup de mal. Juste créer un projet WinForms, coller ta procédure dans le module, et créer un bouton pour l'appeler.

    Lancer, cliquer.

    Et ensuite ouvrir le répertoire du programme.

    Eh bien dans le fichier AImprimer.jpg j'ai bien la copie de tout mon écran.

    Donc le code est bon, il semble y avoir un truc qui cloche dans ta config ou ton paramétrage.

    J'essaie de comprendre la légende du dernier paramètre de CaptureGraphics.CopyFromScreen :
    "CopyPixels will perform a gdi "bitblt" operation to the source from the destination with the given size and specified raster operation"

    Déjà, "to the source from the destination", ça suppose un trajet inverse d'un autre ...

    Il faut que je me plonge dedans, parce que comme ça brut de décoffrage c'est du Chinois (et à la cadence où les Chinois sont en train d'acheter toute la France, il y aura intérêt à s'y mettre).

    Histoire d'en avoir le cœur net, pour commencer ça serait bien de vérifier ce que tu envoies.

    En mettant un point d'arrêt tu pourrais vérifier les coordonnées du CaptureRectangle, et le contenu de CaptureGraphics (je n'ai pas une pratique courante de ça, mais j'imagine qu'il doit y avoir moyen de mettre ça dans un contrôle image pour voir à quoi ça ressemble) : il s'agit de vérifier si ça a la même tête que ce que tu as obtenu, auquel cas l'erreur se trouve en amont, ou si ça te donne tout l'écran, auquel cas il va bien falloir comprendre ce que cette Size.BlockRegionSize a dans les tripes.

  13. #33
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    Ta copie d'écran est un peu déroutante mais une fois qu'on regarde un peu à froid, on s'aperçoit qu'il y a presque toute la fenêtre de Visual Studio, mais avec quelque chose devant qui cache.

    Tu as exécuté en pas à pas, j'imagine ?
    D'où la présence de la fenêtre Visual Studio.

    En fonction d'où tu en étais dans l'exécution, il doit y avoir moyen de comprendre ce qui vient devant, à cacher une partie de la fenêtre Visual Studio.

    Et si tu exécutes le programme directement, sans passer par Visual Studio, ça donne quoi ?

    ***
    N.B.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exePath+"/A_Imprimer.jpg"
    Ça risque d'être plus lisible d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Path.Combine(exePath, "A_Imprimer.jpg")
    Histoire d'éviter de se représenter ce qu'on passe comme paramètre en ligne de commande à un programme exePath.

    Surtout qu'il y a un autre paramètre qui vient derrière, qui ne fait pas partie du chemin.

    Pour ça, dans les références il faut mettre System.IO

    Ça finit par se comprendre bien sûr mais ça occupe quelques neurones, qui pourraient être utiles à comprendre ce qui se passe à l'écran.

  14. #34
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Salut,

    Citation Envoyé par Gluups Voir le message
    Ta copie d'écran est un peu déroutante mais une fois qu'on regarde un peu à froid, on s'aperçoit qu'il y a presque toute la fenêtre de Visual Studio, mais avec quelque chose devant qui cache.

    Tu as exécuté en pas à pas, j'imagine ?
    Tu imagines bien, pas de pas à pas.



    Citation Envoyé par Gluups Voir le message
    Et si tu exécutes le programme directement, sans passer par Visual Studio, ça donne quoi ?
    Même chose.

    Citation Envoyé par Gluups Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exePath+"/A_Imprimer.jpg"
    Ça risque d'être plus lisible d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Path.Combine(exePath, "A_Imprimer.jpg")
    ?
    Comme ça ?

    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 void Impri_Click_1(object sender, EventArgs e)
    {
     
        CaptureMyScreen();
     
    }
     
    private void CaptureMyScreen()
    {
        try
        {
            Bitmap captureBitmap = new Bitmap(3000, 3000);
            Rectangle captureRectangle = Screen.PrimaryScreen.WorkingArea;
            Graphics captureGraphics = Graphics.FromImage(captureBitmap);
            captureGraphics.CopyFromScreen(captureRectangle.Left, captureRectangle.Top, 0, 0, captureRectangle.Size);
            string exePath = Application.StartupPath;
            captureBitmap.Save(Path.Combine(exePath, "A_Imprimer.jpg"), ImageFormat.Png);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    J'ai le même résultat : image tronquée.

  15. #35
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    Citation Envoyé par babaOrhum Voir le message
    Salut,

    Tu imagines bien, pas de pas à pas.
    Pas de pas à pas, ça voudrait dire que j'imagine mal, mais comme tu dis que j'imagine bien, je vais supposer que si, c'est comme ça que ça s'est passé.


    Même chose.
    Sauf qu'on ne voit pas Visual Studio à l'écran j'imagine.

    Alors tu me dis que c'est tronqué, c'est que ça doit l'être, mais je ne peux pas me rendre compte.

    Ou alors à côté tu me mets une copie d'écran réalisée autrement, là on devrait se rendre compte de la différence.

    Tu as regardé, le contenu des différents éléments, comme suggéré ?
    Histoire qu'on ait des éléments pour progresser, quoi.


    Comme ça ?

    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 void Impri_Click_1(object sender, EventArgs e)
    {
     
        CaptureMyScreen();
     
    }
     
    private void CaptureMyScreen()
    {
        try
        {
            Bitmap captureBitmap = new Bitmap(3000, 3000);
            Rectangle captureRectangle = Screen.PrimaryScreen.WorkingArea;
            Graphics captureGraphics = Graphics.FromImage(captureBitmap);
            captureGraphics.CopyFromScreen(captureRectangle.Left, captureRectangle.Top, 0, 0, captureRectangle.Size);
            string exePath = Application.StartupPath;
            captureBitmap.Save(Path.Combine(exePath, "A_Imprimer.jpg"), ImageFormat.Png);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    Absolument.


    J'ai le même résultat : image tronquée.
    Note bien qu'à l'instant nous parlions de lisibilité du code, ce n'est pas censé changer le résultat, juste le temps qu'on met à comprendre en le lisant. Et comprendre vite, ça aide à passer à la suite et comprendre mieux l'ensemble (bien que là il n'y ait pas autre chose avec).

    Mais pour comprendre pourquoi c'est tronqué, il va falloir regarder le contenu des différents objets.

  16. #36
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Merci pour ton aide.

    Capture sans passer par Visual, testé loggé sur 2 hdd, même résultat :


    Nom : A_Imprimer.png
Affichages : 52
Taille : 307,8 Ko

  17. #37
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    J'ai une piste, j'avais les paramètres de Mise à l'échelle et disposition à 125%, lorsque je mets à 100% j'ai alors tout sur ma capture.

    Nom : Sans titre.png
Affichages : 44
Taille : 35,1 Ko

  18. #38
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    Ah mais tu sais que ça n'est pas évident à interpréter ...

    Pour commencer, c'est exprès que c'est flou ?

    Si j'en crois le bandeau nous voyons une fenêtre de l'explorateur, qui montre le fichier A_Imprimer

    Je crois qu'il faudrait être plus précis sur comment tu t'y es pris pour réaliser cette image, et qu'à côté tu mettes une copie d'écran réalisée par les moyens classiques, Windows ou PicPick, histoire qu'on puisse comparer.

  19. #39
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    Je te dirai que de mon côté j'ai aussi 125% comme facteur de zoom pour les fenêtres (je viens de vérifier, on n'est jamais trop prudent), et que ton code a fonctionné à merveille.

    Pour copier le formulaire (ce que le titre du fil pourrait laisser entendre comme le but) j'ai modifié deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                    //Bitmap captureBitmap = new Bitmap(1920, 1080, PixelFormat.Format32bppArgb);
                    Bitmap captureBitmap = new Bitmap(this.Width, this.Height, PixelFormat.Format32bppArgb);
                    //Rectangle captureRectangle = Screen.AllScreens[0].Bounds;
                    Rectangle captureRectangle = this.Bounds;
                    Graphics captureGraphics = Graphics.FromImage(captureBitmap);
                    captureGraphics.CopyFromScreen(captureRectangle.Left, captureRectangle.Top, 0, 0, captureRectangle.Size);
                    string exePath = Application.StartupPath;
                    captureBitmap.Save(Path.Combine(exePath, "A_Imprimer.jpg"), ImageFormat.Jpeg);
                    MessageBox.Show("Copié le formulaire");
    Ça mériterait d'être un peu affiné car je vois quelques pixels du fond d'écran sur les bords.

  20. #40
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Le flou, c'est moi qui l'ait ajouté avec Paint.NET.: )


    Ton code me va parfaitement pour la capture d'écran, il y a certes quelques pixels de trop à gauche, droite et bas de l'image mais c'est pas grave.
    Merci beaucoup encore une fois.

    Il faut maintenant trouver le moyen d'imprimer cette image.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/10/2014, 15h27
  2. imprimer le contenu d'une windows form
    Par quelq'un dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/01/2010, 20h32
  3. Imprimer le contenu d'une form
    Par olibara dans le forum C#
    Réponses: 7
    Dernier message: 18/05/2008, 21h04
  4. imprimer le contenu de l'écran
    Par ensi dans le forum C
    Réponses: 10
    Dernier message: 19/08/2003, 10h47
  5. Comment imprimer le contenu d'un TStringGrid
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/06/2002, 15h41

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