Impression listing [Résolu]

Messages postés
2
Date d'inscription
dimanche 17 août 2008
Dernière intervention
4 décembre 2011
- - Dernière réponse : cs_jeanpierro
Messages postés
2
Date d'inscription
dimanche 17 août 2008
Dernière intervention
4 décembre 2011
- 4 déc. 2011 à 21:15
Boujour ,
Merci a vous tous pour vos infos et vos astuce mais la je sèche en delphi.


J'utilise deux imprimantes
1) laser format A4 (21*29.7) en défaut
2) imprimant papier listing (21*30.5)


Je dois garder l'imprimante 1 par défaut et imprimer sur la deuxième
J'ai beau changé X. & Y.PixelsParPouce toujours le décalage.
Impossible de modifier Printer.PrinterIndex

Par contre si j'imprime 5 feuilles (ou +) en choisissant l'imprimant 2 pas défaut tous ce passe bien
Et si j'imprime 5 feuilles (ou +) en choisissant l'imprimant 2 et l'imprimant 1 par défaut j'ai un décalage car il garde le format A4 en mémoire de l'imprimant 1

//..
Uses printers

XPixelsParPouce := 220;
YPixelsParPouce := 145;

if PrintDialog1.Execute then
begin
Printer.BeginDoc;

Printer.Canvas.TextOut(
Millimetres2PixelsX(10.Value+decalage_horizontal) - SpinEdit_zon_n_imp_X.Value,
Millimetres2PixelsY(250+decalage_vertical-5) - SpinEdit_zon_n_imp_Y.Value,
?texte 1?);

printer.EndDoc;
..//
merci
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
3
Merci
Bonsoir,

ton code est muet sur le choix de l'imprimante...
Avec l'unité "Printers", tu dois tout définir :

imprimante Par Defaut + imprimante choisie

cantador

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de cs_cantador
Messages postés
2
Date d'inscription
dimanche 17 août 2008
Dernière intervention
4 décembre 2011
0
Merci
merci bien pour l'infos.

Je me douter bien qu'il manquer un paramètre vue que je voulais imposer mes dimension de format papier

J'ai trouvé ceci.
@+ jean
***___________
function Millimetres2PixelsX(Millims: integer): integer;
begin
result := Trunc(Millims / (25.4 / XPixelsParPouce));
end;

function Millimetres2PixelsY(Millims: integer): integer;
begin
result := Trunc(Millims / (25.4 / YPixelsParPouce));
end;

//______________
var
Device, Driver, Port: array[0..80] of Char;
DevMode: THandle;
pDevmode: PDeviceMode;


var
H: integer;
S: string;
R: TRect;
begin
***imposse mes dimmentions
// Get printer device name etc.
Printer.GetPrinter(Device, Driver, Port, DevMode);
// force reload of DEVMODE
Printer.SetPrinter(Device, Driver, Port, 0) ;
// get DEVMODE handle
Printer.GetPrinter(Device, Driver, Port, DevMode);
If Devmode <> 0 Then Begin
// lock it to get pointer to DEVMODE record
pDevMode := GlobalLock( Devmode );
If pDevmode <> Nil Then
try
With pDevmode^ Do Begin

// modify paper size
{ dmPapersize :=DMPAPER_A4;
dmPaperWidth:=DMPAPER_A4;
dmPaperLength:=DMPAPER_A4;
}
//*** ici on choisie les dimmentions

dmPapersize := DMPAPER_USER; // or 0
dmPaperLength := 2100; // 2100 mm
dmPaperWidth := 3050; // 3050 mm

// tell printer driver that dmPapersize field contains
// data it needs to inspect.
dmFields := dmFields or DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH;

// tell printer driver that dmPapersize field contains
// data it needs to inspect.
dmFields := pDevMode^.dmFields or DM_ORIENTATION;
dmOrientation :=DMORIENT_PORTRAIT;// DMORIENT_LANDSCAPE;
End;
Printer.SetPrinter(Device, Driver, Port, DevMode);
finally
// unlock devmode handle.
GlobalUnlock( Devmode );
end;
End;

***Puis on imprime
***soit PrintDialog1 ou printer.PrinterIndex := X; X=numeri imprimante

if PrintDialog1.Execute then
begin

XPixelsParPouce := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
YPixelsParPouce := GetDeviceCaps(Printer.Handle, LOGPIXELSY);

XPixelsParPouce := 1200; //a modifier selon imprimante 300/ 600/1200
YPixelsParPouce := 1200;

Screen.Cursor:=crHourGlass;
Printer.Title:='impression';

//debut
Printer.BeginDoc;
// Printer.NewPage;
Printer.Canvas.Font.Size:=SpinEdit_size.Value;

Printer.Canvas.TextOut(
//position du texte
***//a 1,5 cm a droite & 25 cm en bas
Millimetres2PixelsX(15),Millimetres2PixelsY(250) ,Mon texte?);
printer.EndDoc;
**fin
Commenter la réponse de cs_jeanpierro

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.