AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas ausdrucken

Ein Thema von A_Hingerl · begonnen am 12. Aug 2004 · letzter Beitrag vom 12. Aug 2004
Antwort Antwort
A_Hingerl

Registriert seit: 12. Aug 2004
3 Beiträge
 
#1

Canvas ausdrucken

  Alt 12. Aug 2004, 08:41
Hallo

Habe ein kleines Problem. Ich möchte von einem TImage den Canvas oder das Picture.Bitmap auf
einen Drucker ausdrucken. Eigentlich ganz einfach mit


 printer.draw(1,1,image1.picture.bitmap); Wenn mein picture.canvas nur 500 height und 500 width hat.
Wenn ich aber 2000 height und 2000 width habe, kommt beim drucker nichts mehr an.

Kann mir bitte jemand helfen.

Danke

A_hingerl
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Canvas ausdrucken

  Alt 12. Aug 2004, 11:31
Verwende Stretchdraw.
  Mit Zitat antworten Zitat
easywk

Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Canvas ausdrucken

  Alt 12. Aug 2004, 12:24
Ja, StretchDraw hilft dir da weiter. Und wenn du das ganze Papier ausnutzen möchtest und dabei aber das Breiten-Höhen-Verhältnis beibehalten werden soll, dann errechne das für StretchDraw benötigte Rechteck mit der nachfolgenden Routine

Delphi-Quellcode:
(* ***********************************************************
      Ein Rechteck fuer "StretchDraw" auf dem Drucker erzeugen
   *********************************************************** *)

function ScaleToPrint (Img:TImage;Prn:TPrinter;Center:Boolean):TRect;
var h,w,r:Single; Rect:TRect;
begin
  with Prn do
    with Img.Picture.Graphic do
      begin
        { Verhaeltniss errechnen }
        w := PageWidth/Width;
        h := PageHeight/Height;
        { begrenzendes Verhaeltniss }
        if w<h then r:=w else r:=h;
        { in linke obere Ecke legen }
        Rect.Left := 0;
        Rect.Top := 0;
        Rect.Right := Trunc(r*Width);
        Rect.Bottom := Trunc(r*Height);
        { Center ? }
        if Center then
          begin
            Rect.Left := (PageWidth-Rect.Right) div 2;
            Rect.Right := Rect.Right+Rect.Left;
            Rect.Top := (PageHeight-Rect.Bottom) div 2;
            Rect.Bottom := Rect.Bottom+Rect.Top;
          end;
     end;
  { zuweisen }
  Result:=Rect;
end;
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
A_Hingerl

Registriert seit: 12. Aug 2004
3 Beiträge
 
#4

Re: Canvas ausdrucken

  Alt 12. Aug 2004, 16:08
Danke für die prompte Antwort.

Aber mit Strechdraw und Copyrect und sonstigen Möglichkeiten hab ichs bereits probiert. Es geht ja auch. Nur wenn das Timage eine gewisse Größe erreicht (2000x2000) gehts plötzlich nicht mehr. Weiß jemand woran das liegen kann?

A.Hingerl
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Canvas ausdrucken

  Alt 12. Aug 2004, 16:10
Ich hab schon mit mehren Methoden probiert, es funktioniert ja auch.

Aber beim Ausdrucken mit AdobePDF kommt immer nur ein weißes Blatt.

mytar
Francis Obikwelu
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Canvas ausdrucken

  Alt 12. Aug 2004, 16:17
Zitat von mytar:
Ich hab schon mit mehren Methoden probiert, es funktioniert ja auch.

Aber beim Ausdrucken mit AdobePDF kommt immer nur ein weißes Blatt.

mytar
Tja, Delphi druckt eben Bitmaps nicht standardgemäß. Entwerder Du verwendest keine Bitmaps (kein Witz) oder Du nimmst diese Funktion:
Code:
procedure PrintBitmap(aCanvas : TCanvas; Dest : TRect; Bitmap : TBitmap);
  var
    Info : PBitmapInfo;
    InfoSize : DWord;
    Image : Pointer;
    ImageSize : DWord;
  begin
    with Bitmap do
    begin
      GetDIBSizes(Handle, InfoSize, ImageSize);
      Info := AllocMem(InfoSize);
      try
        Image := AllocMem(ImageSize);
        try
          GetDIB(Handle, Palette, Info^, Image^);
          if not Monochrome then
            SetStretchBltMode(ACanvas.Handle, STRETCH_DELETESCANS);
          with Info^.bmiHeader do
            StretchDIBits(aCanvas.Handle, Dest.Left, Dest.Top,
              Dest.RIght - Dest.Left, Dest.Bottom - Dest.Top,
              0, 0, biWidth, biHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);
        finally
          FreeMem(Image, ImageSize);
        end;
      finally
        FreeMem(Info, InfoSize);
      end;
    end;
  end;
  Mit Zitat antworten Zitat
A_Hingerl

Registriert seit: 12. Aug 2004
3 Beiträge
 
#7

Re: Canvas ausdrucken

  Alt 12. Aug 2004, 17:02
Danke. es funktioniert perfekt.

Habe aber noch ein kleines Problem. Die Grafik (Timage) ist 2000 x 1000 und auf dem Bildschirm eine riiiiesen Grafik. Wenn ich es mit PrintBitmap ausdrucke und entsprechend vergrößere, ist es auf einem Laserdrucker etwas unscharf?? Es ist Barcode mit dabei und sollte eigentlich doch scharf sein, da sonst die Barcode-scanner ein problem bekommen werden. Gibts da auch noch ne elegante lösung??

Danke

A.Hingerl
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Canvas ausdrucken

  Alt 12. Aug 2004, 17:07
Zitat von A_Hingerl:
Danke. es funktioniert perfekt.
Habe aber noch ein kleines Problem. Die Grafik (Timage) ist 2000 x 1000 und auf dem Bildschirm eine riiiiesen Grafik. Wenn ich es mit PrintBitmap ausdrucke und entsprechend vergrößere, ist es auf einem Laserdrucker etwas unscharf?? Es ist Barcode mit dabei und sollte eigentlich doch scharf sein, da sonst die Barcode-scanner ein problem bekommen werden. Gibts da auch noch ne elegante lösung??
A.Hingerl
Wenn Du nur Barcodes drucken möchtest, solltest Du vielleicht lieber einen Reportgenerator verwenden, der Barcode unterstützt (Rave, Fastreport) oder Du besorgst Dir einen Barcodefont und gibst den Barcodeinhalt als Text mit der entsprechenden Schriftart aus.
  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:21 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