Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Lazarus
Lazarus Forum d'entraide sur Lazarus, l'EDI RAD multiplateforme basé sur Free Pascal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/02/2011, 17h04   #1
danucc
Membre du Club
 
Avatar de danucc
 
Homme Danilo UCCELLI
Développeur en systèmes embarqués
Inscription : novembre 2008
Messages : 45
Détails du profil
Informations personnelles :
Nom : Homme Danilo UCCELLI
Âge : 59
Localisation : Suisse

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

Informations forums :
Inscription : novembre 2008
Messages : 45
Points : 62
Points : 62
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
danucc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 19h42   #2
parhelie
Membre éclairé
 
patrick
Inscription : février 2008
Messages : 78
Détails du profil
Informations personnelles :
Nom : patrick

Informations forums :
Inscription : février 2008
Messages : 78
Points : 325
Points : 325
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?
parhelie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 08h47   #3
danucc
Membre du Club
 
Avatar de danucc
 
Homme Danilo UCCELLI
Développeur en systèmes embarqués
Inscription : novembre 2008
Messages : 45
Détails du profil
Informations personnelles :
Nom : Homme Danilo UCCELLI
Âge : 59
Localisation : Suisse

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

Informations forums :
Inscription : novembre 2008
Messages : 45
Points : 62
Points : 62
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
danucc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 13h05   #4
danucc
Membre du Club
 
Avatar de danucc
 
Homme Danilo UCCELLI
Développeur en systèmes embarqués
Inscription : novembre 2008
Messages : 45
Détails du profil
Informations personnelles :
Nom : Homme Danilo UCCELLI
Âge : 59
Localisation : Suisse

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

Informations forums :
Inscription : novembre 2008
Messages : 45
Points : 62
Points : 62
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
danucc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 19h13   #5
gibbe
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 31
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 31
Points : 33
Points : 33
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;
..
gibbe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 16h33   #6
lepotager
Membre du Club
 
Homme
Développeur informatique
Inscription : 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 : 44
Points : 44
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
lepotager est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h24.


 
 
 
 
Partenaires

Hébergement Web