Darks membre 864 messages | impression sur une imprimante précise sur un bac précis message: éditer | le 23/01/09 à 16h02 |
salut,
je voudrai imprimer sur une imprimante qui n'est pas forcement celle par defaut et sur un bac différent selon les cas.
d'ailleur j'ai aussi le soucis de devoir lancer une impression qui ferai 3 exemplaires sur 1 bac + 1 ex sur 1 autre bac et encore 1 ex sur un 3ieme bac (oui pas cool, si seulement il imprimer tjrs en blanc)
danc ca c'est la théorie, en pratique c'est sur quickreport, dc gestion par QRPrinter je suppose.
| | code
var
Device, Driver, Port: array[0..512] of Char;
DevMode: THandle;
PDM: PDeviceMode;
begin
Printer.GetPrinter(Device, Driver, Port, DevMode);
PDM := GlobalLock(DevMode);
case TypImpr of
1..4 : PDM^.dmdefaultsource := DMBIN_MIDDLE;
5 : PDM^.dmdefaultsource := DMBIN_LOWER;
6 : PDM^.dmdefaultsource := DMBIN_MANUAL;
else PDM^.dmdefaultsource := DMBIN_CASSETTE;
end;
Printer.SetPrinter(device, driver, port, devmode);
|
pour l'instant j'ai essayer ca, cela prend en compte les bon bac, sur l'imprimante par defaut, mais par contre des que j'arrive sous quickreport (apercu ou impression direct), il a repris le bac par defaut.
Je suis un peu perdu, si certain utilise des tables ou fichier pour gerer leurs param d'impressions, je suis preneur.
car le je seche
|
JROD membre 3829 messages | Re: impression sur une imprimante précise sur un bac précis message: éditer | le 26/01/09 à 22h40 |
salut,
tu as regardé là ? : http://alphomega.developpez.com/imprimer/?page=page_2 |
Darks membre 864 messages | Re: impression sur une imprimante précise sur un bac précis message: éditer | le 27/01/09 à 08h52 |
salut, oui j'avais regarder pas mal d'ex un peu partout, et ca marche a peu pres
| | code procedure TFM_QR_Dev.SetBac(QR : TQuickRep; Bac : word);
var
Device, Driver, Port: array[0..512] of Char;
DevMode: THandle;
PDM: PDeviceMode;
begin
// Choix Imprimante
Printer.PrinterIndex := printer.Printers.IndexOf(NomImpr);
// Donne les Paramètres par défaut de l'imprimante
Printer.GetPrinter(Device, Driver, Port, DevMode);
PDM := GlobalLock(DevMode);
// choix bac
case Bac of
1 : PDM^.dmdefaultsource := DMBIN_MIDDLE; // En Tete
2 : PDM^.dmdefaultsource := DMBIN_LOWER; // Bleu
3 : PDM^.dmdefaultsource := DMBIN_MANUAL; // Rose
else PDM^.dmdefaultsource := DMBIN_CASSETTE; // Blanc
end;
// Nombre Copie pour Entete
if Bac = 1 then
if TypImpr = 1 then PDM^.dmCopies := 3 else
if TypImpr = 2 then PDM^.dmCopies := 2 else PDM^.dmCopies := 1;
// Affectation Imprimante
Printer.SetPrinter(device, driver, port, devmode);
{UNLOCK de l'imprimante}
GlobalUnlock(DevMode);
// Affectation Imprimante du QR
with QR.PrinterSettings do
begin
if PrinterIndex <> printer.printerIndex then PrinterIndex := printer.printerIndex;
UseCustomBinCode := true;
case Bac of
1 : CustomBinCode := DMBIN_MIDDLE; // En Tête A4
2 : CustomBinCode := DMBIN_LOWER; // Bleu A4
3 : CustomBinCode := DMBIN_MANUAL; // Rose A4
else CustomBinCode := DMBIN_CASSETTE; // Blanc A4
end;
end;
// juste pour verifier
// QR.QRPrinter.PrintSetup;
end;
|
en fait ca marche meme parfaitement, mon nouveau soucis, est que je voudrai pouvoir imprimer sur papier entete et ensuite sur un rose (bac different) en lancant la meme impression, mais à priori à la fin de la procedure Quickrep.print; il libére un objet necessaire, ce qui fait que si je met dans le afterprint, l'instruction QuickRep.print;, il me mets une erreur.
dc en bref, comment reimprimer un etat aussitot ? |
JROD membre 3829 messages | Re: impression sur une imprimante précise sur un bac précis message: éditer | le 27/01/09 à 19h02 |
Et en utilisant utilisant ces fonctions :
printers.Printer.BeginDoc;
Application.ProcessMessages;// p'têt ?
printers.Printer.NewPage;
printers.Printer.EndDoc; |
Darks membre 864 messages | Re: impression sur une imprimante précise sur un bac précis message: éditer | le 28/01/09 à 08h11 |
salut, je pense pas, car en fait l'erreur vient du fait que dans la procedure print, il libére l'objet QRPrinter.
dc derriere, sur le afterprint si je refait print, il n'a plus l'objet QRPrinter, dc il plante.
|