Impression listing

Résolu
cs_jeanpierro Messages postés 2 Date d'inscription dimanche 17 août 2008 Statut Membre Dernière intervention 4 décembre 2011 - 18 nov. 2011 à 01:30
cs_jeanpierro Messages postés 2 Date d'inscription dimanche 17 août 2008 Statut Membre 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

2 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
24 nov. 2011 à 21:17
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
3
cs_jeanpierro Messages postés 2 Date d'inscription dimanche 17 août 2008 Statut Membre Dernière intervention 4 décembre 2011
4 déc. 2011 à 21:15
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
0