Einzelnen Beitrag anzeigen

Benutzerbild von Computerbabalulu
Computerbabalulu

Registriert seit: 26. Sep 2003
233 Beiträge
 
#1

Drucken auf Plotter mit TPrinter

  Alt 15. Nov 2009, 18:17
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
Frank
  Mit Zitat antworten Zitat