Impression d'une fenêtre [Résolu]

loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention - 27 mai 2008 à 12:05 - Dernière réponse : loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention
- 6 juin 2008 à 22:25
Bonjour tout le monde,

J'ai réussis à faire en sorte d'imprimer ma deuxième form.

Mes 2 problèmes à présents sont :
*Je souhaiterais que dans la feuille imprimé, on ne voye pas la barre "démarrer" et le titre de la fenêtre. Cela est-il possible??si oui, comment dois-je procéder s'il vous plais??
* Ci-joint, la boîte de dialogue qui apparît avant l'impression. Le message "Page 1 sur document" est incomplet d'aprés moi, comment puis-je le remplir?? (c'est à dire avoir "Page 1 sur 1 document")

Voici le code que j'utilise pour l'impression (Ce code se situe derrière l'événement du clic d'un bouton se situant sur ma deuxième form(celle à imprimer)) :
privatevoid Imprimer_Click(object sender, System.EventArgs e)
{
     PrintDocument pd = new PrintDocument();
 
      // appel de la fonciton CreationBitmap()
     CreationBitmap();
 
     // évènement déclenché juste avant l'impression pour obtenir un dessin
     pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); 
 
     // lancement de l'impression
     pd.Print();
}
 
privatevoid CreationBitmap()
{
   Bitmap screen;
   Bitmap window;
   Imprimer.Visible = false;
 
   // simuler l'appui de la touche PrintScreen
   SendKeys.SendWait("{PRTSC}");
   // récupérer l'image obtenue dans le Presse-Papier 
   window = ((Bitmap)(Clipboard.GetDataObject().GetData("Bitmap")));
   // attribuer l'image à PBWindow
   PBWindow.Image = window;
   
   // simuler le PrintScreen enrichi
   SendKeys.SendWait("+{PRTSC}");
   // récupérer l'image obtenue dans le Presse-Papier
   screen = ((Bitmap)(Clipboard.GetDataObject().GetData("Bitmap")));
   // attribuer l'image à PBScreen
   PBScreen.Image = screen;
}
 
privatevoid pd_PrintPage(object sender, PrintPageEventArgs e)

   // Là c'est comme si tu fais un dessin normal 
   Graphics dc = e.Graphics; 
 
   dc = Graphics.FromImage(PBScreen.Image);
   dc = Graphics.FromImage(PBWindow.Image);
 
   e.Graphics.DrawImage(PBScreen.Image, new PointF(50, 10));
 
   // Test s'il n'y a plus aucune page à imprimer 
   if( dc == null) 
      e.HasMorePages = true;
   else 
      e.HasMorePages = false; 
}

Merci d'avance!!<!-- END TEMPLATE: bbcode_code -->
Afficher la suite 

Votre réponse

31 réponses

Meilleure réponse
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 28 mai 2008 à 21:53
3
Merci
Salut,

Oulà, tu te complique bien la vie avec des captures d'écran en passant pas le presse-papier.
Tiens, regarde ca : http://www.codyx.org/snippet_capture-image-form-tous-controles_147.aspx

__________
  Kenji

Merci Charles Racaud 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Charles Racaud
Meilleure réponse
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 29 mai 2008 à 12:50
3
Merci
Oulà non.
Quand tu appelle la fonction donné, PrintWindowEx te retourne une Bitmap.

Dans l'événement PrintPage tu y fait appelle :

privatevoid pd_PrintPage(object sender, PrintPageEventArgs e)

   e.Graphics.DrawImage(PrintWindowEx(), new PointF(50, 10));
 
   // Test s'il n'y a plus aucune page à imprimer 
   if( dc == null) 
      e.HasMorePages = true;
   else 
      e.HasMorePages = false; 
}

__________
  Kenji

Merci Charles Racaud 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Charles Racaud
loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention - 28 mai 2008 à 22:04
0
Merci
Ok, merci pour ta réponse Charles Racaud.

Mais, est-ce que ta façon de faire va résoudre mes problèmes??

Merci d'avance!!
Commenter la réponse de loic20h28
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 28 mai 2008 à 22:08
0
Merci
Oui, ton problème était bien que tu avais l'écran entier au lieu de la fenêtre ?
Dans le snippet proposé, cela retourne l'image de ta form sans passer par des capture d'écran, press-papier et simulation de touches.

__________
  Kenji
Commenter la réponse de Charles Racaud
loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention - 28 mai 2008 à 22:17
0
Merci
Ok, merci pour tout, j'essayerai ça alors et je te tiens au courant.

Cordialement.
Commenter la réponse de loic20h28
loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention - 28 mai 2008 à 22:38
0
Merci
Par contre, je travail sur VS 2003, ça va fonctionner que même??

Sinon je dois prendre lequel de la page car yen à deux pour C#??

Merci d'avance!!
Commenter la réponse de loic20h28
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 28 mai 2008 à 23:09
0
Merci
Dans ce cas prend celui de MorpionMx (C# 1.x)

__________
  Kenji
Commenter la réponse de Charles Racaud
loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention - 29 mai 2008 à 12:32
0
Merci
Bonjour,

Ok, j'ai essayé mais voilà l'erreur qu'il m'affiche : 'System.Drawing.Bitmap' désigne un 'classe' qui n'est pas valide dans le contexte donné.

Voici le code que cela me donne :
public

Bitmap PrintWindowEx()
{
   Bitmap bmp =
null;
   Graphics gr =
null;
   IntPtr hdc = IntPtr.Zero;
   
try
   {
         bmp =
new Bitmap(
this.ClientRectangle.Width, 
this.ClientRectangle.Height, 
      
          this.CreateGraphics());
         gr = Graphics.FromImage(bmp);
         hdc = gr.GetHdc();
         IntPtr wParam = hdc;
         IntPtr lParam =
new IntPtr(PRF_CLIENT | PRF_CHILDREN);
         Message msg = Message.Create(
this.Handle, WM_PRINT, wParam, lParam);   
         
this.WndProc(
ref msg);
   }
   
catch { }
   
finally
   {
      
if (gr !=
null)
      {
         
if (hdc != IntPtr.Zero)
            gr.ReleaseHdc(hdc);
            gr.Dispose();
      }
   }
   
return bmp;
}

private

void Imprimer_Click(
object sender, System.EventArgs e)
{
      PrintDocument pd =
new PrintDocument();
      Bitmap();
      
// évènement déclenché juste avant l'impression pour obtenir un dessin
      pd.PrintPage +=
new PrintPageEventHandler(pd_PrintPage); 
      
// lancement de l'impression
      pd.Print();
}
Comment puis-je faire pour résoudre mon problème??

Merci d'avance!!
Commenter la réponse de loic20h28
loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention - 29 mai 2008 à 13:07
0
Merci
Merci pour tout, la feuille s'imprime sans le "menu démarer"....donc c'est cool!!

Par contre as-tu une idée pour résoudre le problème suivant : la boîte de dialogue qui apparît avant l'impression. Le message "Page 1 sur document" est incomplet d'aprés moi, comment puis-je le remplir?? (c'est à dire avoir "Page 1 sur 1 document")

Merci d'avance!!
Commenter la réponse de loic20h28
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 29 mai 2008 à 13:50
0
Merci
Non, ca je vois pas.
Tu peux changer le bom avec pd.DocumentName mais pour modifier le texte, je vois pas.

__________
  Kenji
Commenter la réponse de Charles Racaud
loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention - 29 mai 2008 à 13:52
0
Merci
Qu'appelle tu le bom??

Cordialement.
Commenter la réponse de loic20h28
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 29 mai 2008 à 14:29
0
Merci
Je voulais dire le nom  Désolé.

__________
  Kenji
Commenter la réponse de Charles Racaud
loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention - 29 mai 2008 à 16:01
0
Merci
Ok. Pas grave ca arrive a tout le monde de se tromper dans l'écriture.

Merci pour tout ton aide précieuse!!
Commenter la réponse de loic20h28
loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention - 6 juin 2008 à 15:52
0
Merci
Bonjour,


Voila j'ai une deuxième fenêtre que j'aimerais imprimer de la même manière.


Mais dans cette fenêtre, j'ai des dataGrid. Donc je souhaiterais savoir comment je peux faire pour transmettre les valeurs des dataGrid de la première form dans la deuxième??(deuxième form = celle qui va permettre d'imprimer.)


Merci d'avance!!
Commenter la réponse de loic20h28
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 6 juin 2008 à 17:40
0
Merci
Salut,

Pour imprimer un DataGridView, je crois qu'il faut boucler sur chaque ligne/colonne pour redessiner dans le PrintPage.
J'ai déjà vu des sources de ce genre, (voir peut-être en vb.net).

__________
  Kenji
Commenter la réponse de Charles Racaud
loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention - 6 juin 2008 à 17:54
0
Merci
Ok, mais je vois bof comment faire pour boucler....

Pourrais-tu m'aider s'il te plais??

Cordialement.
Commenter la réponse de loic20h28
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 6 juin 2008 à 18:26
0
Merci
Ben c'est pas compliquer,
Un exemple vite fait à la rache :
for (int iRow = 0; iRow < TaDataGridView.RowCount; iRow++) {
  for (int iCol = 0; iCol < TaDataGridView.ColumnCount; iCol++) {
     e.Graphics.DrawString(TaDataGridView.Rows[iRow].Cells[iCol].Value.ToString(),
                           base.Font,
                           Brushes.Black,
                           iCol * 50,
                           iRow * 20);
  }
}

Sinon, tu as des codes tout fait :
http://www.codeproject.com/KB/printing/datagridviewprinter.aspx
__________
  Kenji
Commenter la réponse de Charles Racaud
loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention - 6 juin 2008 à 18:42
0
Merci
Merci pour tout mais je n'utilise pas de dataGridView mais un dataGrid donc ".RowCount" et "ColumnCount" ne sont pas des définition d'un dataGrid.

Comment je peux faire??

Cordialement
Commenter la réponse de loic20h28
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 6 juin 2008 à 19:04
0
Merci
Effectivement, c'est tout de suite moins évident avec une DataGrid.

J'ai trouvé ca qui apparemment, est en .net1
http://www.c-sharpcorner.com/UploadFile/mgold/HowToPrintaDataGridinCsHARPand.NET11212005060838AM/HowToPrintaDataGridinCsHARPand.NET.aspx

__________
  Kenji
Commenter la réponse de Charles Racaud
loic20h28 207 Messages postés mardi 19 juin 2007Date d'inscription 22 février 2016 Dernière intervention - 6 juin 2008 à 20:00
0
Merci
Ton code surement bien mais mon problème c'est que
 "DataGridPrinter" est introuvable comme type ou nom d'expace de nom.

Cordialement.

P.S. : En faite, moi je voudrais reproduire le contenu du dataGrid de la première form dans un dataGrid de la form2.

Merci d'avance!!
Commenter la réponse de loic20h28

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.