Problème d'impression d'une form

cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005 - 17 févr. 2005 à 11:11
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005 - 24 mai 2005 à 08:15
bonjour,





je débute en delphi et j'ai chercher sur les forums comment imprimer.
j'ai trouvé divers éléments mais aucun ne correspond a ce que je
recherche ou alors ne fonctionne pas.


j'utilise ce code :





Code:, ----
procedure Tfm_cde.SpeedButton1Click(Sender: TObject);

var bp : Tbitmap;

rect : TRect;

begin

PrintDialog1.Execute;

bp:=fm_cde.GetFormImage;

printer.BeginDoc;

rect.top:=15;

rect.left:=15;

rect.right:=printer.pageWidth-15;

rect.bottom:=printer.pageHeight-15;

printer.Canvas.StretchDraw(rect,bp);

printer.EndDoc;

bp.Free

end;







j'utilise un printdialog pour obtenir le fenetre de selection
d'imprimant. mais ce code ne fonctionne pas. il me fait carrément
planté mon pc et je suis obliger de redémarrer car plus rien ne
fonctionne.


Aidez moi stv.


je continue de chercher sur les forums.


merci d'avance.


salutation


>>>> "Le génie n'existe pas sans un grain de folie"

23 réponses

ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
17 févr. 2005 à 12:18
Tu peux directement appeler fm_cde.Print pour imprimer ta fiche


@+
Bonne Prog'
Nico



<HR>
N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !
0
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005
17 févr. 2005 à 12:37
merciiiiiii beaucoup ca marche

je n'y avais pas pensé mercii de ton aide.



bon prog a toi aussi et @ une prochaine fois peut etre.

>>>> "Le génie n'existe pas sans un grain de folie"
0
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005
17 févr. 2005 à 12:38
encore un petit renseignement : tu ne serais pas comment je dois faire
pour imprimer cette form en format A4 sans le bouton imprimer?

merci


>>>> "Le génie n'existe pas sans un grain de folie"
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
17 févr. 2005 à 12:59
Ce code te permet d'imprimer l'image de ta form en prenant le maximum de place sur la feuille (détection automatique de l'impression paysage ou portrait), tout en gardant les proportions :

procedure TForm1.Button1Click(Sender: TObject);
var
FormImage: TBitmap;
AspectRatio: Single;
OutputWidth, OutputHeight: Single;
begin
// Capture de l'image de la form
FormImage := GetFormImage;


// On définit l'orientation la mieux adaptée. Si c'est un carré, on choisit poLandscape
Printer.Orientation := poLandscape;
If FormImage.Height > FormImage.Width then Printer.Orientation : = poPortrait;


// Titre vu dans le gestionnaire d'impression
Printer.Title := 'Impression de l''image de la form';
// On veut qu'une feuille s'imprime
Printer.Copies := 1;


// Début du document
Printer.BeginDoc;


try
// On prend le plus de place possible sur la feuille, tout en gardant les proportions
OutputWidth : = FormImage.Width;
OutputHeight := FormImage.Height;
AspectRatio := OutputWidth / OutputHeight;


if (OutputWidth < Printer.PageWidth) and (OutputHeight < Printer.PageHeight) then
begin
if OutputWidth < OutputHeight then
begin
OutputHeight : = Printer.PageHeight;
OutputWidth := OutputHeight * AspectRatio;
end
else
begin
OutputWidth : = Printer.PageWidth;
OutputHeight := OutputWidth / AspectRatio;
end
end;


if OutputWidth > Printer.PageWidth then
begin
OutputWidth : = Printer.PageWidth;
OutputHeight := OutputWidth / AspectRatio;
end ;
if OutputHeight > Printer.PageHeight then
begin
OutputHeight : = Printer.PageHeight;
OutputWidth := OutputHeight * AspectRatio;
end;


// On dessine l'image de la form sur le canvas de l'imprimante
Printer.Canvas.StretchDraw(Rect(0,0,Trunc(OutputWidth),Trunc(OutputHeight)),FormImage);
finally
// On démarre l'impression
Printer.EndDoc;
// On libère FormImage
FormImage.Free;
end;
end;

J'espère que ça t'ira


@+
Bonne Prog'
Nico



<HR>
N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005
17 févr. 2005 à 13:13
merciii pour ton code mais ca ma fait plait planter mon pc et g du rallumer l'ordi.

comment dois je faire? pk ca a planter?

merci de ton aide

>>>> "Le génie n'existe pas sans un grain de folie"
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
17 févr. 2005 à 13:36
chez moi ça plante pas ....


@+
Bonne Prog'
Nico



<HR>
N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !
0
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005
17 févr. 2005 à 13:58
tu serais pas pk ca fait ca?


>>>> "Le génie n'existe pas sans un grain de folie"
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
17 févr. 2005 à 14:04
no dsl aucune idée...


@+
Bonne Prog'
Nico



<HR>
N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
17 févr. 2005 à 14:24
Je viens te tester ton code Ni69 et il dechire tout je le garde de
cote. Enfin tout ca pour dire que ca bug pas chez moi non plus.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005
17 févr. 2005 à 15:31
arfeu mince la sui a mon stage donc je réessayerai chez moi et je vous dirai si ca plante aussi

en tout cas merci de m'avoir répondu et bonne continuation a tous

>>>> "Le génie n'existe pas sans un grain de folie"
0
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005
19 févr. 2005 à 18:38
j'ai essayai le code chez moi ca n'a pa planté mais ca n'a pas afficher sur tte la feuille

est ce normal?

que dois-je faire?

>>>> "Le génie n'existe pas sans un grain de folie"
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
19 févr. 2005 à 19:42
quand tu dis "ca n'a pas afficher sur tte la feuille", tu veux dire qu'il y a eu des blancs ? c'est normal, si tu veux que l'impression soit proportionelle !


@+
Bonne Prog'
Nico



<HR>
N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !
0
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005
19 févr. 2005 à 19:46
ben en fait je voudrai ke ca imprime sur toute la feuille cad ke ca soi
par exemple au centre car ya du blanc en bas et c pa présentable car je
doi imprimer des bon de commande. faudrai ke ca imprime au moins au
centre car si ya du blanc en bas, ca le fai pas

tu compren ce ke je veu dire?


>>>> "Le génie n'existe pas sans un grain de folie"
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
19 févr. 2005 à 20:00
essaie comme ça (j'ai pas testé) :

Printer.Canvas.StretchDraw(Rect((Printer.PageWidth - Trunc(OutputWidth)) div 2,(Printer.PageHeight - Trunc(OutputHeight)) div 2,Trunc(OutputWidth),Trunc(OutputHeight)),FormImage);


@+
Bonne Prog'
Nico



<HR>
N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !
0
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005
19 févr. 2005 à 20:04
merci je vais essayai et je di apres si ca marche ou pas

en tout cas merci de m'aider


>>>> "Le génie n'existe pas sans un grain de folie"
0
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005
20 févr. 2005 à 19:52
ca ne marche pa ca me l'imprime presque au centre mais ca écrase l'image, cad que les écriture sont écrasé, compressé.

je voudrais que ca imprime au centre mais pas écrasé comme ca l'a imprimé avec le bout de code


Printer.Canvas.StretchDraw(Rect((Printer.PageWidth
- Trunc(OutputWidth)) div 2,(Printer.PageHeight - Trunc(OutputHeight))
div 2,Trunc(OutputWidth),Trunc(OutputHeight)),FormImage);






>>>> "Le génie n'existe pas sans un grain de folie"
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
27 févr. 2005 à 14:04
désolé pour le retard...
en effet, cette instruction n'est pas exacte, utilise plutôt :
Printer.Canvas.StretchDraw(Rect((Printer.PageWidth - Round(OutputWidth)) div 2,(Printer.PageHeight - Round(OutputHeight)) div 2,(Printer.PageWidth - Round(OutputWidth)) div 2+Round(OutputWidth),(Printer.PageHeight - Round(OutputHeight)) div 2+Round(OutputHeight)),FormImage);


@+
Bonne Prog'
Nico



<HR>
N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !
0
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005
27 févr. 2005 à 15:15
merci pour le code je vais l'essayai et apres je te dirais si ca fonctionne.
merci de ton aide.

>>>> "Le génie n'existe pas sans un grain de folie"
0
euhhh je viens d'essayai ton code et ca m'imprime bizarrement, il me l'imprime en format paysage et donc forcémen ca me coupe une partie de ma feuille.
ton code ne fonctionne pas dslll.

>>>> "Le génie n'existe pas sans un grain de folie"
0
cs_emeraudes Messages postés 63 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 8 avril 2005
27 févr. 2005 à 16:05
euh dsl ya pa mon pseudo mais c'est moi qui l'est poster le mess

>>>> "Le génie n'existe pas sans un grain de folie"
0
Rejoignez-nous