![]() |
AW: Image.Canvas wird invers gedruckt...
So Leute, hab die Lösung dank shmia gefunden:P
Hab mir dein Code von SwissDelphiCenter geholt und in meinen Source eingebaut und siehe da, es läuft auf allen Rechnern (und dies erst noch beliebig skalierbar)
Code:
Herzlichen Dank für Eure Mithilfe.
procedure TTemperaturdaten.DrawImage(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap);
var Header, Bits: Pointer; HeaderSize: DWORD; BitsSize: DWORD; begin GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize); Header := AllocMem(HeaderSize); Bits := AllocMem(BitsSize); try GetDIB(ABitmap.Handle, ABitmap.Palette, Header^, Bits^); StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top, DestRect.Right, DestRect.Bottom, 0, 0, ABitmap.Width, ABitmap.Height, Bits, TBitmapInfo(Header^), DIB_RGB_COLORS, SRCCOPY); finally FreeMem(Header, HeaderSize); FreeMem(Bits, BitsSize); end; end; procedure TTemperaturdaten.PrintImage(Image: TImage; ZoomPercent: Integer); // if ZoomPercent=100, Image will be printed across the whole page var relHeight, relWidth: integer; begin Screen.Cursor := crHourglass; Printer.Orientation := poLandscape; Printer.BeginDoc; with Image.Picture.Bitmap do begin if ((Width / Height) > (Printer.PageWidth / Printer.PageHeight)) then begin // Stretch Bitmap to width of PrinterPage relWidth := Printer.PageWidth; relHeight := MulDiv(Height, Printer.PageWidth, Width); end else begin // Stretch Bitmap to height of PrinterPage relWidth := MulDiv(Width, Printer.PageHeight, Height); relHeight := Printer.PageHeight; end; relWidth := Round(relWidth * ZoomPercent / 100); relHeight := Round(relHeight * ZoomPercent / 100); DrawImage(Printer.Canvas, Rect(0, 0, relWidth, relHeight), Image.Picture.Bitmap); end; Printer.EndDoc; Screen.cursor := crDefault; end; procedure TTemperaturdaten.SpeedButton10Click(Sender: TObject); Var rect:TRect; Tmp_String:String; Begin if ((Daten_ok) AND (Abbruch=False)) then begin if(Mode=MD_TEMP_DATEN) then begin PrintImage(Image1, 100); end; end; end; Wünsche Euch einen gemütlichen Feierabend... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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