Hallo,
Ich weise Printers.PrinterIndex einen bestimmten Drucker zu.
Dann setze ich über hdMode Druckerschacht, Papiergröße, Duplexmode und Seitenorientierung.
Dann kommt das BeginDoc
danach wird über SetMapMode auf 1/10mm Einheit umgestellt.
Anbei der entsprechende Code. Zwecks Übersicht habe ich die einzelnen DrawText und die Barcode-Aufrufe (es werden auf dem Formular Barcodes gezeichnet) weggelassen.
<pre>
Printer.PrinterIndex :=Printer.Printers.IndexOf(updModule.GetRegValue(' \Formulare\Baustellenberichte','Drucker'));
Printer.GetPrinter(aDevice, aDriver, aPort, hDMode);
if hDMode <>0 then begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then begin
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
pDMode^.dmPaperSize := DMPAPER_A3;
pDMode^.dmFields := pDMode^.dmFields or DM_DEFAULTSOURCE;
pDMode^.dmDefaultSource := $102;
pDMode^.dmFields := pDMode^.dmFields or DM_DUPLEX;
pDMode^.dmDuplex := DMDUP_VERTICAL;
pDMode^.dmFields := pDMode^.dmFields or DM_ORIENTATION;
pDMode^.dmOrientation := DMORIENT_LANDSCAPE;
GlobalUnlock(hDMode);
end; // pDMode
end; // hdMode
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.Title := 'Baustellenformular';
Printer.BeginDoc;
SetMapMode(Printer.Canvas.Handle,mm_lometric);
with Printer do begin
// Druckerauflösung in x-Richtung und in y-Richtung
Aufloesung_X:= GetDeviceCaps(Handle, LOGPIXELSX);
Aufloesung_Y:= GetDeviceCaps(Handle, LOGPIXELSY);
// Abstand bedruckbarer Bereich von Blattrand in Pixeln
Randabstand_X_Pixeln:= GetDeviceCaps(Handle, PHYSICALOFFSETX);
Randabstand_Y_Pixeln:= GetDeviceCaps(Handle, PHYSICALOFFSETY);
// Breite Hoehe
breite := GetDeviceCaps (handle, horzsize);
hoehe := GetDeviceCaps (handle, vertsize);
// Anzahl Farbebenen
AnzahlFarben:= GetDeviceCaps(Handle, PLANES);
end ; // with Printer
// ShowMessage(Format('%d/%d-%d/%d',[breite,hoehe,Randabstand_X_Pixeln,Randabstand_Y_Pi xeln]));
Blatt := Printer.Canvas;
Blatt.Font.Color := clBlack;
Blatt.Font.Name := 'Arial';
Blatt.Font.Style := [fsBold];
Blatt.Font.Size := 3;
...
drucken mittels drawText
Printer.EndDoc;
</pre>
Warum wird nach dem EndDoc immer die Seite plus eine Leerseite ausgedruckt?
Ich hab keinen blassen Schimmer wo ich suchen soll.
Vielleicht hat von Euch einer eine Idee.
LG
Peter
Ich weise Printers.PrinterIndex einen bestimmten Drucker zu.
Dann setze ich über hdMode Druckerschacht, Papiergröße, Duplexmode und Seitenorientierung.
Dann kommt das BeginDoc
danach wird über SetMapMode auf 1/10mm Einheit umgestellt.
Anbei der entsprechende Code. Zwecks Übersicht habe ich die einzelnen DrawText und die Barcode-Aufrufe (es werden auf dem Formular Barcodes gezeichnet) weggelassen.
<pre>
Printer.PrinterIndex :=Printer.Printers.IndexOf(updModule.GetRegValue(' \Formulare\Baustellenberichte','Drucker'));
Printer.GetPrinter(aDevice, aDriver, aPort, hDMode);
if hDMode <>0 then begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then begin
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
pDMode^.dmPaperSize := DMPAPER_A3;
pDMode^.dmFields := pDMode^.dmFields or DM_DEFAULTSOURCE;
pDMode^.dmDefaultSource := $102;
pDMode^.dmFields := pDMode^.dmFields or DM_DUPLEX;
pDMode^.dmDuplex := DMDUP_VERTICAL;
pDMode^.dmFields := pDMode^.dmFields or DM_ORIENTATION;
pDMode^.dmOrientation := DMORIENT_LANDSCAPE;
GlobalUnlock(hDMode);
end; // pDMode
end; // hdMode
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.Title := 'Baustellenformular';
Printer.BeginDoc;
SetMapMode(Printer.Canvas.Handle,mm_lometric);
with Printer do begin
// Druckerauflösung in x-Richtung und in y-Richtung
Aufloesung_X:= GetDeviceCaps(Handle, LOGPIXELSX);
Aufloesung_Y:= GetDeviceCaps(Handle, LOGPIXELSY);
// Abstand bedruckbarer Bereich von Blattrand in Pixeln
Randabstand_X_Pixeln:= GetDeviceCaps(Handle, PHYSICALOFFSETX);
Randabstand_Y_Pixeln:= GetDeviceCaps(Handle, PHYSICALOFFSETY);
// Breite Hoehe
breite := GetDeviceCaps (handle, horzsize);
hoehe := GetDeviceCaps (handle, vertsize);
// Anzahl Farbebenen
AnzahlFarben:= GetDeviceCaps(Handle, PLANES);
end ; // with Printer
// ShowMessage(Format('%d/%d-%d/%d',[breite,hoehe,Randabstand_X_Pixeln,Randabstand_Y_Pi xeln]));
Blatt := Printer.Canvas;
Blatt.Font.Color := clBlack;
Blatt.Font.Name := 'Arial';
Blatt.Font.Style := [fsBold];
Blatt.Font.Size := 3;
...
drucken mittels drawText
Printer.EndDoc;
</pre>
Warum wird nach dem EndDoc immer die Seite plus eine Leerseite ausgedruckt?
Ich hab keinen blassen Schimmer wo ich suchen soll.
Vielleicht hat von Euch einer eine Idee.
LG
Peter