Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Canvas an Drucker senden und drucken (https://www.delphipraxis.net/23458-canvas-drucker-senden-und-drucken.html)

daniel8520 3. Jun 2004 14:48


Canvas an Drucker senden und drucken
 
Hallo,

ich hab ein kleines Problem:
Wie kann man ein Canvas ausdrucken?
Ich hab es so probiert:
Delphi-Quellcode:
begin
   Printer.BeginDoc;
   Printer.Canvas := MeinTImage.Canvas;
   Printer.EndDoc;
end;
Dabei musst ich leider feststellen, dass das Canvas des Printers nur zum lesen da ist.
Wie kann man das denn anderst lösen?

shmia 3. Jun 2004 16:00

Re: Canvas an Drucker senden und drucken
 
Delphi-Quellcode:
begin
   Printer.BeginDoc;
   MeinTImage.PaintTo(Printer.Canvas.Handle, 100, 100);
   // da aber die Pixels deines Images auf dem Drucker 1 zu 1 umgesetzt werden
   // wird dein Bild recht klein werden
   Printer.EndDoc;
end;

atreju2oo0 3. Jun 2004 16:49

Re: Canvas an Drucker senden und drucken
 
Delphi-Quellcode:
var Printer:TPrinter;
begin
Printer:=TPrinter.Create;
with Printer do
  begin
    Orientation:=poLandscape;
    BeginDoc;
    Refresh;
    Canvas.CopyMode:=cmSrcCopy;
    Canvas.CopyRect(Rect(0,0,PageWidth,PageHeight),
                    Zeichenfenster.Canvas,
                    Rect(0,0,560,450));
    EndDoc;
    Destroy;
  end;
end;
Das funktioniert auf das ganze Blatt passend...

daniel8520 4. Jun 2004 17:34

Re: Canvas an Drucker senden und drucken
 
Cool thx.

Funkt das auch bei Laserdrckern???
hab gehört, dass ein Laserdrucker die Befhle anderst interpretiert!

atreju2oo0 4. Jun 2004 17:47

Re: Canvas an Drucker senden und drucken
 
Kanns leider nicht ausprobieren aber ich würde mal davon ausgehen...
Vielleicht ändern sich die Farben etwas...
:gruebel:

mytar 9. Jul 2004 12:57

Re: Canvas an Drucker senden und drucken
 
MeinTImage.PaintTo(Printer.Canvas.Handle, 100, 100);

Ich finde keine Methode PaintTo in TImage?

mytar

Steve 9. Jul 2004 13:59

Re: Canvas an Drucker senden und drucken
 
Ne Alternative wär auch Hier im Forum suchenStrechDraw, Bei Google suchenStrechDraw..

Gruß
Stephan

mytar 9. Jul 2004 14:53

Re: Canvas an Drucker senden und drucken
 
Danke!

Aber kann mir niemand zu "PaintTo" weiterhelfen?

mytar 12. Jul 2004 15:21

Re: Canvas an Drucker senden und drucken
 
ich glaube nicht STRECHDRAW sondern STRETCHDRAW.

Bei mir hat nichts geklappt.

Statt immer alles auszudrucken, und den Drucker hab ich am anderen PC, drucke ich einfach alles als PDF-Datei. Das Dokument ist immer weiß.

Nochmals:

Ich hab in meinen TImage etwas gezeichnet.

Ich möchte nun das ganze Image ausdrucken, und davor noch etwas hineinschreiben.
Das Hineinschreiben funktioniert, ja mit TextOut(..), das passt.

Aber das Image bringe ich einfach nichts in den Printer?

was soll ich machen?

shmia 12. Jul 2004 17:30

Re: Canvas an Drucker senden und drucken
 
Zitat:

Zitat von mytar
Statt immer alles auszudrucken, und den Drucker hab ich am anderen PC, drucke ich einfach alles als PDF-Datei. Das Dokument ist immer weiß.

Da liegt der Hase im Pfeffer !
Der PDF-Treiber kann nicht alle GDI Funktionen korrekt umsetzen.
Du müsstest mal das PixelFormat des Image verändern:
Image1.Picture.Bitmap.PixelFormat := pf8bit;

mytar 15. Jul 2004 16:15

Re: Canvas an Drucker senden und drucken
 
@shmia:
Zitat:

begin
Printer.BeginDoc;
MeinTImage.PaintTo(Printer.Canvas.Handle, 100, 100);
// da aber die Pixels deines Images auf dem Drucker 1 zu 1 umgesetzt werden
// wird dein Bild recht klein werden
Printer.EndDoc;
end;
Ich denke bei TImage gibt es keine PaintTo-Methode, oder doch?

shmia 15. Jul 2004 16:52

Re: Canvas an Drucker senden und drucken
 
Zitat:

Zitat von mytar
Ich denke bei TImage gibt es keine PaintTo-Methode, oder doch?

Hey, du hat ja recht. :shock:
Die Methode PaintTo gibt es nur bei WinControls. Und da TImage von TGraphicControl abgeleitet ist,
muss man dort mit TGraphicControl.Canvas arbeiten.
Damit habe ich eine Procedure gebaut, die jedes Control zeichnen kann:
Delphi-Quellcode:
type
  TGC_cracker = class(TGraphicControl) // Hilfsklasse, wg. Zugriff auf protected Properties
  end;

procedure PaintControlToCanvas(control:TControl; Canvas:TCanvas; x,y:Integer);
var
   dest, src : TRect;
begin
   Assert(Assigned(control));
   Assert(Assigned(canvas));
   if control is TWinControl then
      TWinControl(control).PaintTo(Canvas.Handle, x, y)
   else if control is TGraphicControl then
   begin
      src := control.ClientRect;
      dst := src;
      OffsetRect(dest, x, y);
      Canvas.CopyRect(dest, TGC_cracker(control).Canvas, src);
   end
   else
      Assert(False, 'PaintControlToCanvas(: Control-Class not supported');
end;

mytar 15. Jul 2004 16:54

Re: Canvas an Drucker senden und drucken
 
Super, ich werds gleich testen

mytar


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 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