AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Komplettes Formular ausdrucken?

Ein Thema von Borschti · begonnen am 1. Nov 2007 · letzter Beitrag vom 18. Feb 2008
 
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#11

Re: Komplettes Formular ausdrucken?

  Alt 1. Nov 2007, 15:15
als Anregung hier ne Procedure, mit der ein RichEdit, das ein Bild enthält, gedruckt wurde:
Delphi-Quellcode:
procedure TfrmPrintPreview.BtnPrintClick(Sender: TObject);
const A4_width=210;
      A4_height=297;
      A5_width=148;
      A5_height=210;
var offset_x,
    offset_y: integer;
    dpi_x, dpi_y: integer;
    rc: TRect;
    rgn: HRGN;
    off_x, off_y: integer;
    b: TBitmap;
  Info : PBitmapInfo;
  InfoSize : DWORD;
  Image : Pointer;
  ImageSize : DWORD;
  Bits : HBITMAP;
begin
    dpi_X := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
    dpi_Y := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
    off_X := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
    off_Y := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
     // assume A4 as default format
     // get offset for a5 printing
     offset_x:=(A4_width-A5_width) div 2;
     offset_y:=(A4_height-A5_height) div 2;
     Printer.Title:='Schreibwerkstatt';
     Printer.BeginDoc;
     if (RahmenFileName<>'') then begin
             // draw frame if selected ( this complex code is needed as using StretchDraw() does not work on all printers, e.g. Acrobat)
             b := tbitmap.create;
             b.loadfromfile(RahmenFileName);
             // assume frame were created using 100dpi
             // todo: adjust by off_x, off_y?
             rc:=Rect((Printer.PageWidth-b.width*dpi_x div 100) div 2,
                      (Printer.PageHeight-b.height*dpi_y div 100) div 2,
                      (Printer.PageWidth-b.width*dpi_x div 100) div 2+b.width*dpi_x div 100,
                      (Printer.PageHeight-b.height*dpi_y div 100) div 2+b.Height*dpi_y div 100);
             Bits := b.Handle; // bmp is passed as a parameter
             GetDIBSizes(Bits, InfoSize, ImageSize);
             Info := AllocMem(InfoSize);
             try
               Image := AllocMem(ImageSize);
               try
                 GetDIB(Bits, 0, Info^, Image^);
                 StretchDIBits(Printer.Canvas.Handle,
                     rc.left, rc.top, rc.Right-rc.left, rc.Bottom-rc.top,
                     0, 0, b.Width, b.Height,
                     Image, Info^, DIB_RGB_COLORS, SRCCOPY);
               finally
                 FreeMem(Image, ImageSize);
               end;
             finally
               FreeMem(Info, InfoSize);
             end;
             b.free;
    end;
     rc:=Rect(round(offset_x/25.4*dpi_x)-off_x,
              round(offset_y/25.4*dpi_y)-off_y,
              round((offset_x+A5_width)/25.4*dpi_x)-off_x,
              round((offset_y+A5_height)/25.4*dpi_y)-off_y+dpi_y);
     // FEHLER: das Rendern des RichEdits auf das Device des Druckers funktioniert
     // nicht korrekt, der Parameter Bottom wird nicht korrekt verwendet
     // daher wird hier von Hand der gültige Zeichenbereich festgelegt
     rgn:=CreateRectRgn(rc.left, rc.top, rc.Right, rc.Bottom);
// SelectClipRgn(Printer.Canvas.Handle, rgn);
     RichEditToCanvas(FrmSWMain.RE, Printer.Canvas, dpi_x, dpi_y, rc);
     Printer.EndDoc;
     close;
end;
Die wird in der Form zwar nicht funktionieren, weil Vars und andere Proceduren fehlen, aber vielleicht kann man das ja umbauen
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:48 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