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

Lazarus Pascal Discussion :

Imprimer un TForm


Sujet :

Lazarus Pascal

  1. #1
    Membre régulier Avatar de danucc
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Novembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 69
    Points : 124
    Points
    124
    Par défaut Imprimer un TForm
    Bonjour,

    J'essaye désespérément d'imprimer un Form.
    Il semble que la méthode Print (qui existe en Delphi) n'existe pas pour Lazarus.
    Je me suis tourné vers GetFormImage ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.BtnPrintClick(Sender: TObject);
    var
      BitMap : TBitMap;
    begin
      BitMap := TBitMap.Create;
      BitMap := Form1.GetFormImage;
      BitMap.SavetoFile('toto.bmp');
    end;
    ...mais là je me retrouve avec un fichier toto.bmp contenant une image bitmap de la bonne dimension mais totalement noire.

    (Je comptais ensuite imprimer le fichier toto,bmp)

    Quelqu'un as-t-il une idée ou un lien pour m'aider à imprimer mon Form ?

    D'avance merci.

    Danilo Uccelli

  2. #2
    Membre averti

    Profil pro
    dirlo
    Inscrit en
    Février 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : dirlo

    Informations forums :
    Inscription : Février 2008
    Messages : 83
    Points : 404
    Points
    404
    Par défaut
    Quel OS?
    Une capture d'écran, ça marche?
    J'ai eu ce genre de problème avec un bureau metisse (Linux). La capture d'écran était noire, elle aussi.
    Peut-être une piste?

  3. #3
    Membre régulier Avatar de danucc
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Novembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 69
    Points : 124
    Points
    124
    Par défaut
    OS : Win XP (mais je vais aussi faire un essai sur Ubuntu 10.10 aujourd'hui)
    Lazarus : 0.9.29 mais j'ai aussi essayé avec 0.9.31 qui lui, me pose un autre problème au niveau de TChart.

    Un Alt-PrtScr puis coller dans Paint fonctionne très bien.

    Mais je fais peut-être faux, quelqu'un as-t-il déjà essayé ?
    Ou une autre méthode simple pour imprimer un form ?

    D'avance merci.

    Danilo Uccelli

  4. #4
    Membre régulier Avatar de danucc
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Novembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 69
    Points : 124
    Points
    124
    Par défaut Imprimer un Tform (contourné)
    Bonjour,

    A première vue le soucis se situe dans la méthode SaveToFile.

    J'ai résolu mon problème autrement, en imprimant le Form directement après l'avoir récupéré dans un bitmap par GetFormImage.

    J'ai suivi les conseils trouvé ici : http://wiki.lazarus.freepascal.org/Using_the_printer

    Tout n'est pas terminé mais l'horizon s'éclaircit

    Bonne journée à tous.

    Danilo Uccelli

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    J'arrive un peu tard dans la discussion mais ne suffit-il pas de copier le canvas de ta Form sur le canvas de Printer?

    genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ..
    uses printers;
    ..
      MyPrinter := Printer;
      MyPrinter.BeginDoc;
        MyPrinter.Canvas := Form1.canvas;
      MyPrinter.EndDoc;
    ..

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 29
    Points : 54
    Points
    54
    Par défaut
    Petit déterrage de topic...

    Comme ce problème est récurent chez les anciens utilisateurs de Delphi dont je fais partie, voici la formule adéquate pour imprimer une Tform complète (mais cela fonctionnerai tout aussi bien avec un composant de cette Tform).

    Ici ma Tform se nomme Formgrille, pensez donc à remplacer ce nom par celui de la form à imprimer !

    Ceci est le code à placer sur l'évènement Onclick votre joli bouton "Imprimer" que vous aurez placé quelque par sur votre Tform. Il s'agit ni plus ni moins de ce que l'on trouve sur le wiki rectifié à ma sauce vu que ce topic ressort sur les moteurs de recherche avant notre Wiki préféré mentionné plus bas par Danucc

    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
     
    procedure Tformgrille.ButtonimprimeficheClick(Sender: TObject);
    var MyPrinter : TPrinter;
        myBitMap : TBitMap;
    begin
    myBitMap := TBitMap.Create;       // creons un bitmap
    myBitMap.Width := formgrille.Width;    // de la taille
    myBitMap.Height := formgrille.Height;  // de formgrille
    formgrille.BorderStyle:=bsNone;
    formgrille.PaintTo(myBitMap.Canvas, 0, 0);  // remplissons canvas du bitmap avec le canvas de form
    formgrille.BorderStyle:=bsSingle;
    //
    MyPrinter := Printer;        // déclarons une imprimante
    MyPrinter.BeginDoc;        // débutons la création du document à imprimer
    {*
     on va copier dans une zone d'impression égale à la moitié de la hauteur et largeur du format du papier (sinon notre formgrille prend toute la feuille, c'est trop) l'ensemble du canvas de notre bitmap.
    en jouant avec la taille de myprinter.canvas (0,0,x,y) on imprime plus ou moins grand. Pour avoir pleine page on remplacera
    RoundToInt(myPrinter.PaperSize.Width/2) par myPrinter.PaperSize.Width
    et feront de même avec PaperSize.Height
    A vous de rectifier en fonction de la taille voulue
    *}
    myPrinter.Canvas.CopyRect(Classes.Rect(0, 0, RoundToInt(myPrinter.PaperSize.Width/2), RoundToInt(myPrinter.PaperSize.Height/2)),
         myBitMap.Canvas, Classes.Rect(0, 0, myBitMap.Width, myBitMap.Height));
    MyPrinter.EndDoc; // fin de la creation de document ce qui lance l'impression
    myBitMap.Free;    // detruisons notre bitmap devenu inutile
    end;

    Voilà, c'est tout bête (enfin.. je ne disais pas ça il y a 1 heure...) et ensuite réutilisable à volonté. Vous pouvez même développer en mettant dans une variable de type INTEGER le % par exemple pour la dimension de l'impression du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    myPrinter.Canvas.CopyRect(Classes.Rect(0, 0, RoundToInt(myPrinter.PaperSize.Width*MaVariablePourcentage/100), RoundToInt(myPrinter.PaperSize.Height*MaVariablePourcentage/100)),
         myBitMap.Canvas, Classes.Rect(0, 0, myBitMap.Width, myBitMap.Height));
    En esperant que cela pourra servir à tous ceux qui comme moi se sont cassé la tête pendant des heures en se demandant comment remplacer le Tform.Print

    Patrick

Discussions similaires

  1. [Débutant] imprimer une interface TForm
    Par bicha_27 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/09/2012, 09h49
  2. [TForm] Ne pas autoriser l'ouverture d'un form
    Par sbeu dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2002, 11h20
  3. [VB6] [Outlook] Imprimer un mail en VB
    Par der dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 12/09/2002, 14h20
  4. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26
  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