AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Drucken auf Plotter mit TPrinter
Thema durchsuchen
Ansicht
Themen-Optionen

Drucken auf Plotter mit TPrinter

Ein Thema von Computerbabalulu · begonnen am 15. Nov 2009 · letzter Beitrag vom 15. Nov 2009
Antwort Antwort
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
Benutzerbild von Computerbabalulu
Computerbabalulu

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

Re: Drucken auf Plotter mit TPrinter

  Alt 15. Nov 2009, 21:46
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:
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;
Gruß Baba
Frank
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz