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 :

Impression du Canvas d'une Form


Sujet :

C++Builder

  1. #1
    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 Impression du Canvas d'une Form
    Bonjours a tous et meilleurs voeux pour cette annee 2008.
    Je termine une petite base de donnees et je dois imprimer les resultats, j'ai fais des recherches et je n'ai rien trouve de convainquant, mais j'ai peut etre trouve une astuce permettant d'imprimer le Canvas d'une Form avec tous ce qu'il contient, il est necessaire de veiller a conserver la proportionnalite entre le Canvas de la Form et celui de Printer, dans l'exemple suivant je ne m'en suis pas occupe.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    // ne pas oublier d'inclure  #include "QClipbrd.hpp" et #include "Printers.hpp"
    TRect rd;
            TPrinter *Prntr = Printer();
    rd = Rect(0, 0, Prntr->PageWidth, Prntr->PageHeight);
    Image1->Picture->Bitmap->Assign(Form1->GetFormImage());
            Prntr->BeginDoc();
            Prntr->Canvas->StretchDraw(rd, Image1->Picture->Bitmap);
            Prntr->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
    Je viens de tester
    Une Form qui respecte le rapport Hauteur Largeur de la feuille sur laquelle on va imprimer, j'ai derive des GroupBox
    qui me permettent d'avoir des zones d'encadrement dans lesquelles je peu placer des TCheckBox, TEdit, TMemo, Tlabel, TImage, les cadres des TEdit et TMemo sont mis a None je peu ecrire dans les TEdit, TMemo ou cocher les TCheckBox, je n'utilise que des composants que je sais programmer

  3. #3
    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
    J'ai fais l'essai sur deux autres ordinateurs un equipe de XP l'autre de Window 2000, et la deception ca ne marche pas j'affiche une page blanche, j'ai donc cherche pourquoi chez moi ca fonctionne et pas ailleurs, et je crois avoir compris je travaille avec une resolution de 1680 x 1050 et sur les autres poste la resolution est nettement inferieure j'ai fais l'essai sur le poste XP avec une forme de 400 x 600 donc visible a l'ecran et la ca fonctionne je ferais l'essai demain sur le poste equipe de Window 2000

  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
    J'ai trouve sur le site de codes sources une solution qui permet d'imprimer sur Windows 2000, XP et quelque soit le type d'imprimante et de plus c'est relativement simple
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    TRect rd;
    TPrinter *Prntr = Printer();
    rd = Rect(0, 0, Prntr->PageWidth, Prntr->PageHeight);
    Image1->Picture->Bitmap->Assign(Form1->GetFormImage());
    // ligne a ajouter
    Image1->Picture->Bitmap->PixelFormat = pf24bit; // a adapter
    //TPixelFormat {pfDevice, pf1bit, pf4bit, pf8bit, pf15bit, pf16bit, pf24bit, pf32bit, pfCustom}
    Prntr->BeginDoc();
    Prntr->Canvas->StretchDraw(rd, Image1->Picture->Bitmap);
    Prntr->EndDoc();
    Avec ce code la ou je sortais une page blanche ca imprime apparament certaines imprimantes ou drivers ont besoin de cette information?

    Il me reste un probleme ma fonction de copie de la Form ne copie que ce qui est visible a l'ecran

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 419
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 419
    Par d�faut
    Salut !

    Encore heureux qu'on imprime que ce qui est visible !
    Si tu cherches � imprimer �galement le boitier de l'�cran avec le circuit imprim�, il te faudra passer par une option... celle en dessous de "No Smoke" !

    Par contre, il y a quand m�me (peut-�tre) un truc � rajouter :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    Printer()->Canvas->CopyMode = cmSrcCopy;
    Au cas o� l'imprimante serait initialis�e d'une mani�re diff�rente (va savoir !) .

    Est-ce qu'il faut par contre passer par DeviceCapabilities et/ou GetDeviceCaps (API Windows) pour effectuer une analyse en profondeur ?

    Un autre truc, ce serait de r�aliser le stretch sur un bitmap (ou ici sur ton image) au cas o� l'imprimante ne saurait faire que du Draw.

    A plus !

  6. #6
    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 henderson
    Si tu cherches � imprimer �galement le boitier de l'�cran avec le circuit imprim�, il te faudra passer par une option... celle en dessous de "No Smoke" !
    Je fume pas, meme pas la moquette , mais je m'enfous je bois
    Ma Form a suivant la resolution de l'ecran une dimension plus grande que ne le permet la resolution de l'ecran et je ne parvient a imprimer que ce qui se voit a l'ecran la partie masquee est ignoree, j'ai fais un essai de poser le contenu de ma Form sur un TPageControl de trois pages mais la je ne parviens pas a copier chaque page et a les coller sur un meme Canvas, je copie la premiere page mais pas les suivantes

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 419
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 419
    Par d�faut
    Salut !

    L'option "No Smoke" est une autre histoire... (celle des hot-lines)

    En fait, il s'agit de d�placer la form sur l'�cran et de la recontruire � partir d'une mosa�que.
    Quelque chose comme �a ( faut v�rifier quand-m�me... parce que ... il est tard) :

    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
     
    int top;
    int left;
    Graphics::TBitmap *Image = new Graphics::TBitmap;
    Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
    Bitmap->Width = ClientWidth;
    Bitmap->Height = ClientHeight;
    for(top = 0; top < Form->Height; top = top + Screen->Height) //<<???
        {
        Top = top; //on déplace la form
        for(left = 0; left < Form->Width; left = left + Screen->Width) //<<???
            {
            Left = left; //idem
            Image->Assign( GetFormImage() ); //ca devrait le faire ???
            Bitmap->Canvas->Draw(left, top, Image);   
            }
        }
    delete Bitmap;
    delete Image;
    Normalement, �a devrait �tre coup� au couteau (mais je ne sais pas si les param�tres de Screen sont ceux qu'il faut utiliser...) !
    Qui plus est, il faut sans doute d�marrer avec un offset � cause de la barre de titre ou alors la rendre invisible pendant le processus... ce qui serait le mieux ! Bref... !!!
    En d�finitive, la form ne fait que s'auto scanner !
    A plus !

  8. #8
    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
    Apres avoir bien galere je vais peut etre avoir une solution, ce n'est pas tout a fait ce que je cherche mais c'est un debut.
    Donc apres avoir lu des articles sur le sujet il semble judicieux de redefinir le Canvas du TImage, l'essai que j'ai fait recupere deux morceaux d'Image d'une Form cette Image rempli la Form par la fonction Stretch, je copie ces deux portions d'Image dans une autre Form (la fonction Stretch n'est pas activee), chose que je ne savais pas faire avant(une seule Image s'affichait)
    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
     
    TControlCanvas *pCn;
    TControlCanvas *pCn1;
    pCn = new TControlCanvas();
    pCn->Control = Form2->Image1;
    pCn1 = new TControlCanvas();
    pCn1->Control = Form1->Image1;
    // CopyRect(const TRect &Dest, TCanvas* CanvasSrc, const TRect &Source);
    TRect   DestRect, DestRect1, SrcRect, SrcRect1;
    DestRect = Rect(0,0,429,100);
    SrcRect = Rect(0,0,429, 100);
    DestRect1 = Rect(0,201,429,501);
    SrcRect1 = Rect(0,201,429, 501);
    Form2->Show();
    pCn->CopyRect(DestRect, pCn1, SrcRect);
    pCn->CopyRect(DestRect1, pCn1, SrcRect1);

Discussions similaires

  1. <canvas>Placer une forme g�om�trique dans une autre
    Par Hydre dans le forum G�n�ral JavaScript
    R�ponses: 10
    Dernier message: 13/05/2009, 23h42
  2. Dessin d'un cercle sur le canvas d'une form
    Par Mickey.jet dans le forum Delphi
    R�ponses: 1
    Dernier message: 08/11/2006, 11h50
  3. R�ponses: 5
    Dernier message: 23/09/2006, 12h40
  4. question sur le canvas d'une form?
    Par Mickey.jet dans le forum Delphi
    R�ponses: 4
    Dernier message: 23/09/2006, 11h01
  5. Comment mettre le curseur d'un Memo sur le Canvas d'une Form ?
    Par julie20 dans le forum Composants VCL
    R�ponses: 3
    Dernier message: 27/08/2003, 13h24

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