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++Builder Discussion :

Imprimer un imprim écran


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Par défaut Imprimer un imprim écran
    Bonsoir,

    dans mon application je dois imprimer le graphique que je génère avec quelques informations se trouvant dans des TLabel et un autre TImage autour de l'image contenant le graphique.

    Je me débrouille donc pour faire un screen de tout ça, et je l'envoies à l'imprimante, mais je n'obtient qu'une page blanche.

    Alors que ça fonctionne, quand j'utilise pdf créator. Enfin j'ai des problèmes d'échelles de l'image suivant différents PC. Ca vient peut être de la différence de résolution de l'écran

    Je vois pas bien comment régler ces problèmes.

    Mon code pour l'export PDF :
    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
    HDC ScreenSrc;  //déclaration d'une variable recevant un device context
    	Graphics::TBitmap *Bitmap = new Graphics::TBitmap;     //bitmap pour stocker l'imprim écran provisoir
    	Bitmap->Width = Form1->Image1->Width;
    	Bitmap->Height = (Form1->Image1->Height)+60;
    	// Device Context de l'écran (ou  (0))- pointeur--------------------------------------------------------------------------------------------------------
    	ScreenSrc = GetDC(HWND_DESKTOP);
     
    	//destination de l'imprim écran, x et y Dest, largeur/hauteur Dest,  source  , abscisse et ordonnée de la source(5 pour bordure du cadre), opération copy---------
    	BitBlt(Bitmap->Canvas->Handle, 0, 0, Bitmap->Width, Bitmap->Height, ScreenSrc, Form1->Left+Form1->Image1->Left+5, Form1->Top+46, SRCCOPY);
     
    	TPrinter * Pr=Printer();
    	Pr->Orientation=poLandscape;    //mode paysage
    	int prnindex = Pr->Printers->IndexOf("PDFCreator"); //recuperer l'index de pdfcreator
     
     
    	if (prnindex==-1)
    		ShowMessage("PDFCreator n'est pas installer");
    	else
    	{
    		Pr->PrinterIndex=prnindex;
    		Form1->PrntDial->Execute();
    		Pr->BeginDoc();
    		 //Définition de la zone d'enregistrement dans le pdf
    		TRect Dest=Rect(300,500,Bitmap->Width*9, Bitmap->Height*9);
    		//Récupération de ce qu'il faut enregistrer
    		TRect Sour=Rect(0, 0,Bitmap->Width,Bitmap->Width);
    		//définition de ce qu'il va être enregistré
    		Pr->Canvas->CopyRect(Dest,Bitmap->Canvas,Sour);
    		Pr->EndDoc();
    	}
    Pour l'impression : (assez ressemblant)
    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
    HDC ScreenSrc;  //déclaration d'une variable recevant un device context
    	Graphics::TBitmap *Bitmap = new Graphics::TBitmap;     //bitmap pour stocker l'imprim écran provisoir
    	Bitmap->Width = Form1->Image1->Width;
    	Bitmap->Height = (Form1->Image1->Height)+60;
    	// Device Context de l'écran (ou  (0))- pointeur--------------------------------------------------------------------------------------------------------
    	ScreenSrc = GetDC(HWND_DESKTOP);
     
    	//destination de l'imprim écran, x et y Dest, largeur/hauteur Dest,  source  , abscisse et ordonnée de la source(5 pour bordure du cadre), opération copy---------
    	BitBlt(Bitmap->Canvas->Handle, 0, 0, Bitmap->Width, Bitmap->Height, ScreenSrc, Form1->Left+Form1->Image1->Left+5, Form1->Top+46, SRCCOPY);
     
    	//pointer sur imprimante
    	TPrinter *Impr = Printer();
        Impr->Orientation=poLandscape;    //mode paysage
    	if(Form1->PrntDial->Execute())
    	{
        	Impr->BeginDoc();
    		// Rect de l'imprimante(marge gauche, marge haute, largeur imprimante - marge droite, hauteur imprimante - marge basse);
    		TRect Dest=Rect(300,500,Bitmap->Width*9, Bitmap->Height*9);
    		// Rect de la source(gauche, haut, largeur, hauteur);
    		TRect Sour=Rect(0, 0,Bitmap->Width,Bitmap->Width);
            //définition de ce qu'il va être enregistré
    		Impr->Canvas->CopyRect(Dest,Bitmap->Canvas,Sour);
    		Impr->EndDoc();
        }

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut l'Ermite Misanthrope
    Je ne sais pas si cela pourra te depanner mais tu peu toujours essayer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     BitBlt(Bitmap->Canvas->Handle, 0, 0, Bitmap->Width, Bitmap->Height, ScreenSrc, Form1->Left+Form1->Image1->Left+5, Form1->Top+46, SRCCOPY);
     
    // ajouter ceci
    //TPixelFormat {pfDevice, pf1bit, pf4bit, pf8bit, pf15bit, pf16bit, pf24bit, pf32bit, pfCustom}
    Bitmap->PixelFormat = pf24bit; // a adapter
     
        TPrinter * Pr=Printer();
    avant l'ajout de cette ligne je sortais aussi une page blanche

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Par défaut
    Ben apparemment ça fonctionne, j'ai quelque chose sur ma page !
    Il ne me reste plus qu'à faire quelque ajustements de taille.

    en fait j'avais vu tes différents codes sur l'impression, (ici), mais je pensais pas que c'était cette ligne là, la clé.

    Surtout que j'ai pu observer le même problème lors de tentatives d'impression depuis le canvas, d'autre chose que d'un TBitmap.

    Etrange...

    En tout cas, merci blondelle pour cette ligne de code salvatrice.

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Je ne comprend pas tres bien pourquoi cela fonctionne mais apparamment soit le Driver soit l'imprimante ont besoin de " TPixelFormat " du Bitmap et ne supporte pas la valeur par default

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

Discussions similaires

  1. [WD12] Comment imprimer sans imprimer!
    Par zouzoukha dans le forum WinDev
    Réponses: 16
    Dernier message: 22/05/2012, 18h02
  2. Comment interdire la touche Imprime écran ?
    Par spikto dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 01/08/2005, 10h54
  3. comment faire pour imprimer à l'écran un objet
    Par GConstant dans le forum Général Python
    Réponses: 10
    Dernier message: 11/08/2004, 11h31
  4. imprimer le contenu de l'écran
    Par ensi dans le forum C
    Réponses: 10
    Dernier message: 19/08/2003, 10h47

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