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
Drucker:= TPrinter.create
Dann wird mit
Drucker.PrinterIndex:=xxx
der entsprechende Plotter zugewiesen.
Nun wird ganz normal mir
Delphi-Quellcode:
with Drucker do begin
BeginDoc;
..................
EndDoc;
end;
der Druck abgewickelt.
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