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 le contenu d'une PaintBox


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut Imprimer le contenu d'une PaintBox
    Bonjours à toutes et à tous.
    Voici mon problème:
    j'ai fais un dessinateur sous borland 2006 et je dois faire ceci: ajout des fonctionnalités d'impression.
    Je fais des formes géométriques dans une PaintBox
    Donc je voudrais faire un bouton et dès que je clique dessus, ça imprime le contenu de la PaintBox.

    Mais comment faire :s, je n'y arrive pas, je n'ai pas encore vu comment imprimer une PaintBox

    Merci de votre Aide
    Cordialement, Cheva

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut
    svp c'est important

  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
    Salut cheva52
    Un lien sur le sujet dans le Forum

  4. #4
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 420
    Par défaut
    Salut !

    Bienvenu sur le forum !

    Pour commencer, tu peux consulter l'aide : TPrinter et TCanvas.
    Il y a des exemples, en particulier avec TPrinter::Canvas !
    La séquence est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Printer()->BeginDoc(); //pour commencer l'impression
     
    Printer()->Canvas-> ....; //pour dessiner
     
    Printer()->EndDoc(); // pour terminer l'impression
    Par exemple, si on se limite à imprimer tout le contenu du PaintBox, la partie dessin sera (comme l'exemple donné dans le lien et apporté par blondelle) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TRect Dest = Rect(..., ..., ..., ...); 
    TRect Srce = Rect(0, 0, PaintBox->Width, PaintBox->Height);
    Printer()->Canvas->CopyRect(Dest, PaintBox->Canvas, Srce);
    Voir éventuellement si on doit passer par StretchDraw.

    Si le dessin sur le PaintBox est obtenu à l'aide d'objets graphiques sachant se dessiner sur un canvas (quelconque), dans ce cas... il suffit de rediriger le dessin vers le canvas de l'imprimante !

    A plus !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut
    Désolé, je suis pas tres doué en programmation donc je ne comprends pas tout v_v
    Donc je peux utiliser un TButton?
    si oui ça se présenterais comme ça
    void __fastcall TFPrinc::Button1Click(TObject *Sender)
    {

    }
    Mais que faut -il mettre dedans?
    Ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void __fastcall TFPrinc::Button1Click(TObject *Sender)
    {
    TRect Dest = Rect(..., ..., ..., ...); 
    TRect Srce = Rect(0, 0, PaintBox->Width, PaintBox->Height);
    Printer()->Canvas->CopyRect(Dest, PaintBox->Canvas, Srce);
    }
    Désolé de ma non compréhension ^^'
    J'attends vos réponses et Joyeux Noél à tous

  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
    Alors premiere chose pense aux Balises soit le # soit le symbole juste avant.
    Desole je pensais que tu ete plus avance, henderson voulait dire ceci
    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      TPrinter *Prntr = Printer();
    // Rect de l'imprimante(marge gauche, marge haute, largeur imprimante - marge droite, hauteur imprimante - marge basse);
      TRect Dest = Rect(20,20,Prntr->PageWidth - 20,Prntr->PageHeight - 20);
    // Rect du PaintBox(gauche, haut, largeur, hauteur);
      TRect Srce = Rect(0, 0, PaintBox1->Width, PaintBox1->Height);
    // on demarre l'impression
      Prntr->BeginDoc();
    // on imprime
      Prntr->Canvas->CopyRect(Dest, PaintBox1->Canvas, Srce);
    // fin de l'impression
      Prntr->EndDoc();
    }

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut
    Ah ben niquel, vraiment compréhensible avec les commentaires, je vous remercie.
    Par contre, lors de la compilation (ça le faisait même sans ce buton) il me dise
    [Linker Fatal Error] Fatal, Unable to open file 'DELPHIX90.BPI'
    est ce que ça vous dit quelque chose oO?
    car bon j'ai analyser chaque unité (cpp et .h) mais je ne vois pas d'ou viens l'erreur.
    Si quelqu'un s'y connais, qu'il poste un ptit message
    Sinon pas grave, un grand merci pour ces réponses.
    Cordialement Cheva

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut
    sinon aussi pour le TPrinter
    je prneds un TPrinterDialog ou un TPrinterSetupDialog?
    je ne pense pas qu'il y est une importance avec le code?

  9. #9
    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 refaire l'essai et je n'ai pas d'erreur.
    est tu sur d'etre en C++ il me semble que " 'DELPHIX90.BPI' " c'est une erreur Delphi
    Les boites de dialogue TPrinterDialog et TPrinterSetupDialog donnent une plus belle presentation mais ne sont nullement necessaire

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut
    Oui je suis bien en c++ mais je ne comprends pas oO.
    Sinon, faut -il inclure quelque chose de spécial?
    Car j'ai voulu tester le bouton sur un autre progrmme qui utilise aussi une paintbox, cela me met aucune erreur mais m'envoi directement sur le CPU, sans voir l'executable ...

  11. #11
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 420
    Par défaut
    Salut !

    Ne pas oublier d'inclure dans le header de TForm1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <Printers.hpp>
    En tout cas, chez moi (BCB3 Pro) c'est indispensable.

    En ce qui conercene l'erreur annoncée ...???
    Il y a peut-être quelque chose d'autre en amont qui pose problème... ???
    Si c'est dans la OnClick du bouton, alors il faudrait montrer le code.

    A plus !

  12. #12
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 420
    Par défaut
    Salut !

    Il existe aussi une autre solution.
    Remplacer en lieu et place le TPaintBox actuel par un TPanel (Panel1) dont on fixe le BevelOuter sur bvLowered.
    Rajouter dans la classe de TForm1, en public, les déclarations suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //Notre pseudo paintbox
    //Cette form va être créée dynamiquement
    TForm *PaintBox;
    //Une méthode pour dessiner sur le pseudo paintbox
    //C'est le prototype d'une méthode du type OnMouseDown que je nomme Dessiner
    //Mais que je rajoute, ici, manuellement
    void __fastcall Dessiner(TObject *Sender, TMouseButton Button,
              TShiftState Shift, int X, int Y);
    Dans le constructeur de TForm1, on va créer une form sans bords et sans barre de titre, dont le parent sera Panel1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    PaintBox = new TForm(this);
    PaintBox->BorderStyle = bsNone;
    PaintBox->Color = clWhite;
    PaintBox->Parent = Panel1;
    PaintBox->Align = alClient;
    PaintBox->Visible = true;
    //On lui affecte comme OnMouseDown la méthode Dessiner
    PaintBox->OnMouseDown = Dessiner;
    }
    La méthode pour dessiner, ici un simple cercle de couleur aléatoire à l'endroit du click sur cette form qui sert de PaintBox :
    Et c'est juste un exemple...

    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
     
    void __fastcall TForm1::Dessiner(TObject *Sender, TMouseButton Button,
              TShiftState Shift, int X, int Y)
    {
    TCanvas *C = PaintBox->Canvas;
    //Pour générer une couleur pseudo aléatoire
    //Juste pour cette démo
    TColor color = (TColor)((GetTickCount() *4) & 0xFFFFFF);
    C->Brush->Style = bsSolid;
    C->Brush->Color = color;
    C->Pen->Style = psSolid;
    C->Pen->Mode = pmCopy;
    C->Pen->Color = color;
    C->Ellipse(X-20, Y-20, X+20, Y+20);
    }
    Donc s'il existe un bouton pour imprimer, voici sa OnClick :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    PaintBox->Print();
    }
    Comme je n'ai pas d'imprimante sous la main, c'est à tester...

    A plus !

Discussions similaires

  1. [C#] Imprimer le contenu d'une fenêtre avec ascenseur
    Par biglong dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/08/2007, 23h29
  2. [impression] imprimer le contenu d'une url
    Par FFF dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 30/11/2005, 15h07
  3. Sauvegarde du contenu d'une paintbox sous delphi 5
    Par TISSEYRE dans le forum Composants VCL
    Réponses: 1
    Dernier message: 23/06/2005, 11h41
  4. imprimer le contenu d'une TPaintBox
    Par stimbo dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/03/2004, 19h42
  5. [Kylix] Imprimer le contenu d'une boîte de dialogue
    Par cmp-france dans le forum EDI
    Réponses: 13
    Dernier message: 18/10/2003, 20h31

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