Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Discussion: Imprimer un TForm

  1. #1
    Membre du Club Avatar de danucc
    Homme Profil pro Danilo UCCELLI
    Développeur en systèmes embarqués
    Inscrit en
    novembre 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Nom : Homme Danilo UCCELLI
    Âge : 60
    Localisation : Suisse

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

    Informations forums :
    Inscription : novembre 2008
    Messages : 52
    Points : 65
    Points
    65

    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 :
    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 éclairé

    Profil pro patrick
    Inscrit en
    février 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Nom : patrick

    Informations forums :
    Inscription : février 2008
    Messages : 83
    Points : 355
    Points
    355

    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 du Club Avatar de danucc
    Homme Profil pro Danilo UCCELLI
    Développeur en systèmes embarqués
    Inscrit en
    novembre 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Nom : Homme Danilo UCCELLI
    Âge : 60
    Localisation : Suisse

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

    Informations forums :
    Inscription : novembre 2008
    Messages : 52
    Points : 65
    Points
    65

    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 du Club Avatar de danucc
    Homme Profil pro Danilo UCCELLI
    Développeur en systèmes embarqués
    Inscrit en
    novembre 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Nom : Homme Danilo UCCELLI
    Âge : 60
    Localisation : Suisse

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

    Informations forums :
    Inscription : novembre 2008
    Messages : 52
    Points : 65
    Points
    65

    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
    Nouveau Membre du Club
    Inscrit en
    juillet 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 31
    Points : 36
    Points
    36

    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 :
    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 : 43
    Points
    43

    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 :
    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 :
    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •