Impression --> Form1.Print

Signaler
Messages postés
55
Date d'inscription
mardi 26 août 2003
Statut
Membre
Dernière intervention
22 janvier 2006
-
Messages postés
63
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
8 septembre 2008
-
Bonjour,

j'aimerais pouvoir imprimer une page entière (pour cela j'utilise un Form1.print), mais mon problème, c'est que ma Form1 est plus grande que l'écran et cela n'imprimer pas ce qui n'est pas visible à l'écran.
Comment faire pour imprimer l'entier de la Form1?

merci d'avance.

Yves

www.limpbizkit.ch

13 réponses

Messages postés
1106
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
16
Il faut régler la propriété PrintScale de ta TForm.

===========
Validez les réponses si ok...

ViewVite : HTML - ZIP
Messages postés
55
Date d'inscription
mardi 26 août 2003
Statut
Membre
Dernière intervention
22 janvier 2006

J'avais déjà envisagé cette possibilité, mais malheureusement cela ne marche pas.

Yves

www.limpbizkit.ch
Messages postés
368
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013

Il ne faut pas utiliser form1.print mais tprinter :

Uses printers;

procedure PrinterStretchDraw(R:TRect;Bmp:TBitmap);
var
BmpInfo,
BmpData : Pointer;
BmpInfoSize,
BmpDataSize : Cardinal;
begin
GetDIBSizes(Bmp.Handle,BmpInfoSize,BmpDataSize);
GetMem(BmpInfo,BmpInfoSize);
GetMem(BmpData,BmpDataSize);
try
GetDIB(Bmp.Handle,Bmp.Palette,BmpInfo^,BmpData^);
StretchDIBits(Printer.Canvas.Handle,R.Left,R.Top,R.Right,R.Bottom,
0,0,Bmp.Width,Bmp.Height,BmpData,TBitmapInfo(BmpInfo^),
DIB_RGB_COLORS,SRCCOPY);
finally
FreeMem(BmpData);
FreeMem(BmpInfo);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var dc : hdc;
bmp : tbitmap;
R : TRect;
begin
// dc:=GetWindowDc(Form1.Handle); // pour imprimer le form complet
dc:=GetDc(Form1.Handle); // pour imprimer le contenu du form
bmp:=tbitmap.Create;
bmp.Width:=form1.BoundsRect.Right-form1.BoundsRect.Left;
bmp.Height:=form1.BoundsRect.Bottom-form1.BoundsRect.Top;
StretchBlt(bmp.canvas.Handle,0,0,bmp.Width,bmp.Height,
dc,0,0,form1.Width,form1.Height,SRCCOPY);
ReleaseDc(Form1.Handle,dc);
with printer do
begin
BeginDoc;
PrinterStretchDraw(Rect(0,0,Printer.PageWidth,Printer.PageHeight),bmp);
EndDoc;
end;
bmp.Free;
end;

Bon Coding ....

ManChesTer.
Messages postés
368
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013

oupss,

la c'est + beau...

procedure TForm1.Button1Click(Sender: TObject);
var dc : hdc;
bmp : tbitmap;
R : TRect;
begin
bmp:=tbitmap.Create;
//dc:=GetWindowDc(Form1.Handle); // pour imprimer le form complet
//bmp.Width:=form1.BoundsRect.Right-form1.BoundsRect.Left;
//bmp.Height:=form1.BoundsRect.Bottom-form1.BoundsRect.Top;
dc:=GetDc(Form1.Handle); // pour imprimer le contenu du form
bmp.Width:=form1.ClientWidth;
bmp.Height:=form1.ClientHeight;
BitBlt(bmp.canvas.Handle,0,0,bmp.Width,bmp.Height,
dc,0,0,SRCCOPY);
ReleaseDc(Form1.Handle,dc);
with printer do
begin
Orientation:=poLandscape;
BeginDoc;
Canvas.Lock;
PrinterStretchDraw(Rect(0,0,Printer.PageWidth,Printer.PageHeight),bmp);
Canvas.Unlock;
EndDoc;
end;
bmp.Free;
end;

Bon Coding ....

ManChesTer.
Messages postés
4
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
12 décembre 2004

Votre procédure d'impression fonctionne, mais elle fait la même chose que form.print;

Moi je veux imprimer la form1 (755px x 1008px) au complet.
Messages postés
368
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013

Essaye en ajoutant:

Form1.Width:=755;
Form1.Height:=1008;

Chez moi ca Fonctionne sans problemes (WinXp) ....

Bon Coding ....

ManChesTer.
Messages postés
4
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
12 décembre 2004

désolé encore moi cela ne fonctionne toujours pas le formulaire est imprimé ce qui est vue à l'écran et la police(font) est immence
que faire ?????
merci
Messages postés
368
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013

Aucune idée,

Cette méthode Fonctionne sans problemes sur un form 755px x 1008px sur ma machine. Donc chez toi ca devrais fonctionner aussi.
il faudrais pour pouvoir te répondre disposé du form en question...

Bon Coding ....

ManChesTer.
Messages postés
4
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
12 décembre 2004

ou je peux vous envoyez cela serait gentil de m'aider
Messages postés
4
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
12 décembre 2004

envoie moi ton émail je te ferai parvenir les sources
merci
muguette.toupin@videotron.ca
Messages postés
2
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
10 mars 2005

Pour moi ca marche pas non plus. si vous avez trouvé la solution contactez moi



rr_mutenroshi@hotmail.com

Mu†enrosh!
Messages postés
1
Date d'inscription
samedi 18 octobre 2003
Statut
Membre
Dernière intervention
23 mars 2006

Pour pouvoir imprimer ta form comme bon te semble, utilise ce code :

uses
Printers;

procedure TForm1.Button1Click(Sender: TObject);
begin

// PrintScale : type de mise à l'échelle de la form à imprimer
// Valeurs possibles : aucune (poNone) [par défaut], proportionnelle
// (poProportional) ou ajustée à la page (poPrintToFit)
PrintScale := poProportional;

// Printer.Orientation : disposition en portrait (poPortrait)
// ou paysage (poLandscape)
Printer.Orientation := poLandscape;

// Imprime un aperçu de la form
Print;
end;

Dans mon exemple, j'ai une form appelée Form1 qui contient un bouton appelé Button1.

En espérant t'avoir aidé

JuPaillos


P.S : N'oubliez pas de valider si ça vous convient, comme réponse.
Messages postés
63
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
8 septembre 2008

Je ne comprends pas, car quand j'utilise ton code, il ne me prend pas toute la form, il me prend seulement ce qui est vu à l'écran.

Merci de votre aide.

[:)]