Ich habe eine art mini Druckprogramm mit dem man z.B vorgedruckte Schilder mit den eigegebenen Daten bedrucken kann. Nun hab ich das an nem neuen DinA3 Laserdrucker (Querformat) ausprobiert und die Koordinaten dementsprechend eingegeben das alles am richtigen Platz ist.
Soweit lief alles ziemlich gut.
Nur als ich es auf einem älteren Nadeldrucker testete (Hochformat) war die größe der einzelnen Einträge total verfälscht, die Position war anders usw.
Muss ich jetzt für jeden drucker ein neues Programm schreiben in dem andere Größen und Koordinaten angegeben sind ??? oder gibts da ne andere Lösung damit das Endergebnis immer gleich rauskommt - ob auf Nadel oder Laserdrucker!??
Hier der Quellcode für den Druck:
procedure Teingabeform.druckenBitBtnClick(Sender: TObject);
var
aDevice : array[0..255] of char;
aDriver : array[0..255] of char;
aPort : array[0..255] of char;
hDMode : THandle;
PDMode : PDEVMODE;
IniFile: TIniFile;
begin
Printer.PrinterIndex := -1;
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 := DMBIN_MANUAL;
pDMode^.dmOrientation := DMORIENT_PORTRAIT;
// pDMode^.dmOrientation := DMORIENT_Landscape; // bei Querformat
GlobalUnlock(hDMode);
end;
end;
Printer.BeginDoc;
Printer.Canvas.TextOut (0, 0, ' ');
SetMapMode (Printer.Canvas.Handle, MM_LOMETRIC);
with Printer.Canvas do
begin
Font.Name := 'Arial Black';
SetTextAlign (Handle, TA_LEFT + TA_TOP);
Font.Height := 390;
TextOut (1400, -150, textedit1.text);
Font.Height := 150;
TextOut (1300, -495, textedit2.text);
end;
Printer.EndDoc;
end;
Soweit lief alles ziemlich gut.
Nur als ich es auf einem älteren Nadeldrucker testete (Hochformat) war die größe der einzelnen Einträge total verfälscht, die Position war anders usw.
Muss ich jetzt für jeden drucker ein neues Programm schreiben in dem andere Größen und Koordinaten angegeben sind ??? oder gibts da ne andere Lösung damit das Endergebnis immer gleich rauskommt - ob auf Nadel oder Laserdrucker!??
Hier der Quellcode für den Druck:
procedure Teingabeform.druckenBitBtnClick(Sender: TObject);
var
aDevice : array[0..255] of char;
aDriver : array[0..255] of char;
aPort : array[0..255] of char;
hDMode : THandle;
PDMode : PDEVMODE;
IniFile: TIniFile;
begin
Printer.PrinterIndex := -1;
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 := DMBIN_MANUAL;
pDMode^.dmOrientation := DMORIENT_PORTRAIT;
// pDMode^.dmOrientation := DMORIENT_Landscape; // bei Querformat
GlobalUnlock(hDMode);
end;
end;
Printer.BeginDoc;
Printer.Canvas.TextOut (0, 0, ' ');
SetMapMode (Printer.Canvas.Handle, MM_LOMETRIC);
with Printer.Canvas do
begin
Font.Name := 'Arial Black';
SetTextAlign (Handle, TA_LEFT + TA_TOP);
Font.Height := 390;
TextOut (1400, -150, textedit1.text);
Font.Height := 150;
TextOut (1300, -495, textedit2.text);
end;
Printer.EndDoc;
end;
Comment