![]() |
Drucken mit Graphics32 Library
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 mein Code:
Delphi-Quellcode:
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... :?
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; Kann mir vielleicht jemand bei dieser Angelegenheit helfen? Vielen dank.... Euer Moon |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz