AGB  ·  Datenschutz  ·  Impressum  







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

Drucken mit Graphics32 Library

Ein Thema von moonwhaler · begonnen am 4. Sep 2007
Antwort Antwort
moonwhaler

Registriert seit: 22. Dez 2005
57 Beiträge
 
Delphi 5 Enterprise
 
#1

Drucken mit Graphics32 Library

  Alt 4. Sep 2007, 15:49
Hallo DP'ler!

Ich zerbreche mir gerade meinen Kopf an dem Thema "Drucken mit Graphics32 Library". Ich habe mich für die G32 entschieden, da sie in meinen Augen eine gute Verbreitung hat, hochperformant ist und auch oft empfohlen wird. Ich habe mir eine kleine Druck-Klasse gebastelt, die ich mit Hilfe der Beitäge in der DP (HIER) finden konnte. Leider, zu meiner Enttäuschung, klappt das irgendwie überhaupt nicht. Der Drucker ist zwar auswählbar und lässt sich auch ansprechen (wahnsinn!), aber das wars auch schon. Es wird lediglich ein leeres Bild "gedruckt" - wohl eher ein leeres Blatt.

Hier mein Code:
Delphi-Quellcode:
type
  TImagePrint = class(TObject)
  private
    FFilename: WideString;
    FImagePrinter: WideString;
    FALeft: Integer;
    FATop: Integer;
    FARight: Integer;
    FABottom: Integer;

    procedure ResizeProportional( var Source: TBitmap32;
                                  AvailDim: TPoint );
    function SetPrinter( PrinterName: WideString ): Boolean;
  public
    constructor Create(); overload;
    procedure Print();
    procedure PrintImage( PCanvas: TCanvas );
  published
    property Filename: WideString read FFilename write FFilename;
    property ImagePrinter: WideString read FImagePrinter write FImagePrinter;
  end;

implementation


constructor TImagePrint.Create();
begin
  inherited Create();

  self.FFilename := '';
  self.FImagePrinter := '';
  self.FALeft := 0;
  self.FATop := 0;
  self.FARight := 0;
  self.FABottom := 0;
end;


procedure TImagePrint.ResizeProportional( var Source: TBitmap32;
                                          AvailDim: TPoint );
var
  _factor: Real; // Scaling
  _newdim: TPoint; // New size
  _resampler: TKernelResampler;
begin
  _factor := Min(Source.Width / AvailDim.X, Source.Height / AvailDim.Y); // Skalierungsfaktor ermitteln
  _newdim.X := Floor(Source.Width * _factor); //Neue Breite errechnen
  _newdim.Y := Floor(Source.Height * _factor); // " Höhe "

  Source.Width := _newdim.X;
  Source.Height := _newdim.Y;

  _resampler := TKernelResampler.Create(Source);
  _resampler.Kernel := TLanczosKernel.Create;

  Source.Draw(Source.Width,Source.Height,Source);
end;


function TImagePrint.SetPrinter( PrinterName: WideString ): Boolean;
var
  i: Integer;
begin
  result := FALSE;
  Printer.PrinterIndex := -1;

  for i:=0 to Printer.Printers.Count - 1 do
  begin
    if ( self.FImagePrinter = Printer.Printers[i] ) then
    begin
      Printer.PrinterIndex := i;
      result := TRUE;
      break;
    end;
  end;
end;


procedure TImagePrint.Print();
begin
  if ( self.SetPrinter( self.FImagePrinter ) ) then
  begin
    Printer.BeginDoc;
    SetMapMode( Printer.Canvas.Handle, MM_LOMETRIC );
    self.PrintImage( Printer.Canvas );
    Printer.EndDoc;
  end;
end;


procedure TImagePrint.PrintImage( PCanvas: TCanvas );
var
  _picture: TBitmap32;
  _rect: TRect;
  _dimension: TPoint;
begin
  _picture := Tbitmap32.Create;

  self.FALeft := 0;
  self.FATop := 0;
  self.FARight := 400;
  self.FABottom := 400;

  _rect := Rect( self.FALeft, self.FATop, self.FARight, self.FABottom );
  _picture.LoadFromFile( self.FFilename );

  _dimension.x := 400;
  _dimension.y := 400;

  self.ResizeProportional( _picture, _dimension );
  _picture.DrawTo( PCanvas.Handle, _rect, _picture.BoundsRect);

  FreeAndNil( _picture );
end;
Ich habe einige Festwerte hereingeschrieben, um zu testen, ob überhaupt was passiert - aber auch das brachte keinen Erfolg... Leider. Alles was ich versuche ist ein Bild proportional auf ein Blatt zu drucken - wenn möglich mit Millimeter-Angabe der Breite, bzw. Maximalhöhe...

Kann mir vielleicht jemand bei dieser Angelegenheit helfen? Vielen dank....
Euer Moon
  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 05:20 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