![]() |
Drucken auf Plotter mit TPrinter
Hallo ihr lieben.
Ich habe ein Problem und komme nicht weiter! Ich Drucke aus meine Programm heraus auf verschiedenen Plottern (das möchte ich jedenfalls). Für jeden Plotter gibt es einen eigenen Thread der das Ausdrucken übernimmt. Bein Starten des Threads wird jeweils ein neues Druckerobjekt erzeugt
Delphi-Quellcode:
Dann wird mit
Drucker:= TPrinter.create
Delphi-Quellcode:
der entsprechende Plotter zugewiesen.
Drucker.PrinterIndex:=xxx
Nun wird ganz normal mir
Delphi-Quellcode:
der Druck abgewickelt.
with Drucker do begin
BeginDoc; .................. EndDoc; end; Wenn ich das ganze mit dem Standard Printer Objekt Printer mache, funktioniert es einwandfrei. Wenn ich es mit dem zur Laufzeit erzeugtem Drucker mache klappt es nicht, da das Objekt Drucker offensichtlich die Druckereinstellungen (Papiergröß, Papiertype usw.) nicht kennt. Wieso ist das so, dass mein Standard Printer Objekt die Daten vom Drucker kennt und das von mir zur Laufzeit angelegte Drucker Objekt nicht? Und vorallem wie kann ich das ändern? Ich möchte hier keine Daten angeben sondern die einstellungen so übernehmen wie Sie im Druckersetup des Treibers grade eingestellt sind. Hier mal der Thread:
Delphi-Quellcode:
unit PEngine1;
interface uses Classes, SysUtils, stdctrls, comctrls,GR32_Image, ExtCtrls, Messages, Variants, Graphics, Forms, Dialogs, Printers, GR32, JPEG,WinSpool; type Engine1 = class(TThread) public constructor Create(PRN : Integer; Viewer : TImage32); private { Private-Deklarationen } PIndex : Integer; IViewer : TImage32; Drucker : TPrinter; protected procedure Execute; override; procedure PrintImage(Datei: string; O,L,H,B: Integer); procedure Preprint(PCanvas: TCanvas; px1: Integer; py1: Integer; px2: Integer; py2: Integer; Datei: string); procedure Drucken; end; implementation uses Main, Controls; { Engine1 } constructor Engine1.Create(PRN : Integer; Viewer : TImage32); begin PIndex := PRN; IViewer := Viewer; FreeOnTerminate := True; inherited Create(True); end; procedure Engine1.Preprint(PCanvas: TCanvas; px1: Integer; py1: Integer; px2: Integer; py2: Integer; Datei: string); var gra : Tbitmap32; begin IViewer.Visible:= false; IViewer.Bitmap.LoadFromFile(Datei); IViewer.Visible:= true; gra := Tbitmap32.Create; gra.LoadFromFile(Datei); //gra.ResamplerClassName := 'TLinearResampler'; gra.ResamplerClassName := 'TKernelResampler'; gra.DrawTo(pcanvas.Handle, Rect(px1,py1,px2,py2), gra.BoundsRect); gra.Free; end; procedure Engine1.PrintImage(Datei: string; O,L,H,B: Integer); begin Drucker:= TPrinter.Create; Drucker.PrinterIndex:=PIndex; with Drucker do begin BeginDoc; PrePrint(Canvas,O,L,H,B,Datei); EndDoc; end; end; procedure Engine1.Execute; begin Synchronize(Drucken); end; procedure Engine1.Drucken; begin PrintImage('I:\Test\Image1p.jpg', 0,0,16064,9686); end; end. Gruß Baba |
Re: Drucken auf Plotter mit TPrinter
Hat sich erledigt, ich komme wohl nicht drum rum dem Drucker Objekt die Daten zu übergeben.
Wem es interessiert ... Einstellungen des aktuellen Standartdruckers auslesen...
Delphi-Quellcode:
var
Device : array[0..255] of char; Driver : array[0..255] of char; Port : array[0..255] of char; hDMode : THandle; PDMode : PDEVMODE; begin //Default Printer oder hier mit Printer.PrinterIndex:=xxx einen bestimmten Drucker wählen Printer.GetPrinter(Device, Driver, Port, hDMode); if hDMode <> 0 then begin pDMode := GlobalLock(hDMode); if pDMode <> nil then begin Memo1.Lines.Add('DmSize : ' + IntToStr(pDMode^.dmSize)); Memo1.Lines.Add('dmDriverExtra : ' + IntToStr(pDMode^.dmDriverExtra)); Memo1.Lines.Add('dmFields : ' + IntToStr(pDMode^.dmFields)); Memo1.Lines.Add('dmOrientation : ' + IntToStr(pDMode^.dmOrientation)); Memo1.Lines.Add('dmPaperSize : ' + IntToStr(pDMode^.dmPaperSize)); Memo1.Lines.Add('dmPaperLength : ' + IntToStr(pDMode^.dmPaperLength)); Memo1.Lines.Add('dmPaperWidth :' + IntToStr(pDMode^.dmPaperWidth)); Memo1.Lines.Add('dmScale : ' + IntToStr(pDMode^.dmScale)); Memo1.Lines.Add('dmCopies : ' + IntToStr(pDMode^.dmCopies)); Memo1.Lines.Add('dmDefaultSource : ' + IntToStr(pDMode^.dmDefaultSource)); Memo1.Lines.Add('dmPrintQuality : ' + IntToStr(pDMode^.dmPrintQuality)); Memo1.Lines.Add('dmColor : ' + IntToStr(pDMode^.dmColor)); Memo1.Lines.Add('dmDuplex : ' + IntToStr(pDMode^.dmDuplex)); Memo1.Lines.Add('dmYResolution : ' + IntToStr(pDMode^.dmYResolution)); Memo1.Lines.Add('dmTTOption : ' + IntToStr(pDMode^.dmTTOption)); Memo1.Lines.Add('dmCollate : ' + IntToStr(pDMode^.dmCollate)); Memo1.Lines.Add('dmLogPixels : ' + IntToStr(pDMode^.dmLogPixels)); Memo1.Lines.Add('dmBitsPerPel : ' + IntToStr(pDMode^.dmBitsPerPel)); Memo1.Lines.Add('dmPelsWidth : ' + IntToStr(pDMode^.dmPelsWidth)); Memo1.Lines.Add('dmPelsHeight : ' + IntToStr(pDMode^.dmPelsHeight)); Memo1.Lines.Add('dmDisplayFlags : ' + IntToStr(pDMode^.dmDisplayFlags)); Memo1.Lines.Add('dmDisplayFrequency : ' + IntToStr(pDMode^.dmDisplayFrequency)); Memo1.Lines.Add('dmMediaType : ' + IntToStr(pDMode^.dmMediaType)); Memo1.Lines.Add('dmDitherType : ' + IntToStr(pDMode^.dmDitherType)); Memo1.Lines.Add('dmICCManufacturer : ' + IntToStr(pDMode^.dmICCManufacturer)); Memo1.Lines.Add('dmICCModel : ' + IntToStr(pDMode^.dmICCModel)); Memo1.Lines.Add('dmPanningWidth : ' + IntToStr(pDMode^.dmPanningWidth)); Memo1.Lines.Add('dmICMIntent : ' + IntToStr(pDMode^.dmPanningHeight)); GlobalUnlock(hDMode); end; end; end; Einstellungen des aktuellen Standartdruckers schreiben...
Delphi-Quellcode:
Gruß Baba
var
Device : array[0..255] of char; Driver : array[0..255] of char; Port : array[0..255] of char; hDMode : THandle; PDMode : PDEVMODE; begin //Default Printer oder hier mit Printer.PrinterIndex:=xxx einen bestimmten Drucker wählen Printer.GetPrinter(Device, Driver, Port, hDMode); if hDMode <> 0 then begin pDMode := GlobalLock(hDMode); if pDMode <> nil then begin {Set to custom Settings} pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE or DM_SCALE or DM_ORIENTATION or DM_DEFAULTSOURCE or DM_PRINTQUALITY or DM_COLOR or DM_PAPERWIDTH or DM_PAPERLENGTH or DM_MEDIATYPE or DM_DITHERTYPE; pDMode^.dmPaperSize := 256; pDMode^.dmScale := 100; pDMode^.dmOrientation:= 2; pDMode^.dmDefaultSource:= 400; pDMode^.dmPrintQuality:= 600; pDMode^.dmColor:= 2; pDMode^.dmPaperWidth := 4320; pDMode^.dmPaperLength := 6950; pDMode^.dmMediaType:=1; pDMode^.dmDitherType:=2; GlobalUnlock(hDMode); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz