Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Drucken aus einer Form (https://www.delphipraxis.net/86567-drucken-aus-einer-form.html)

GerHil 15. Feb 2007 19:18


Drucken aus einer Form
 
Hallo, Ihr Experten,

mit "print" ( Delphi7) kann ich den Teil einer Form ausdrucken für den die Blattgröße ausreichend ist.

Gibt es eine Möglichkeit, einen Bereich der Form per Pixelangabe auszuwählen , der gedruckt werden soll?

Gruß GerHil

TonyR 15. Feb 2007 22:39

Re: Drucken aus einer Form
 
Ich würde einfach einen Screenshot der Form machen und dann kann man das Bild ja mit einem Bearbeitungsprogramm anpassen und ausdrucken.
Oder versteh ich dein Problem falsch?

bitsetter 16. Feb 2007 00:09

Re: Drucken aus einer Form
 
Hier ist ein wenig Code, hoffentlich habe ich es richtig verstanden.
Delphi-Quellcode:
uses Printers;

Procedure BildAusSchnitt(hWND: HWND; iLeft, iTop, iWidth, iHeight: integer);
var
  c: TCanvas;
begin
  BringWindowToTop(hWND);
  c:= TCanvas.Create;
  c.Handle:= GetWindowDC(hWND);
  try
    printer.begindoc;
    printer.Canvas.CopyRect(Rect(0, 0, iWidth* 10, iHeight* 10), c, Rect(iLeft, iTop, iLeft+ iWidth, iTop+ iHeight));
    printer.enddoc;
  finally
    ReleaseDC(hWND, c.handle);
    c.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   BildAusSchnitt(Form1.Handle, 80, 10, 180, 120);
end;

matashen 16. Feb 2007 08:16

Re: Drucken aus einer Form
 
ich hab mir an Ausdrucken auch schon die Zähne ausgebissen, bin dann auf diesen Code gestoßen

Mußte die Berechnung der Header und Imagesize noch anpassen, lief ursprünglich mit getmem, da kam aber ab und zu nur Mißt aus dem Drucker, mit GETDIBSizes funzts.


PROCEDURE PrintBitmap(Canvas: TCanvas; DestRect: TRect; Bitmap: TBitmap);
VAR
BitmapHeader: pBitmapInfo;
BitmapImage,header,bits : POINTER;
HeaderSize, BitsSize: Cardinal;
ImageSize : DWORD;
nographics:boolean;
BEGIN

GetDIBSizes(Bitmap.Handle, HeaderSize, ImageSize);;
Bitmapheader := VirtualAlloc(nil, HeaderSize, MEM_COMMIT, PAGE_READWRITE);
BitmapImage := VirtualAlloc(nil, ImageSize, MEM_COMMIT, PAGE_READWRITE);

TRY
GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^, BitmapImage^);

StretchDIBits(Canvas.Handle,
DestRect.Left, DestRect.Top, // Destination Origin
DestRect.Right - DestRect.Left, // Destination Width
DestRect.Bottom - DestRect.Top, // Destination Height
0, 0, // Source Origin
Bitmap.Width, Bitmap.Height, // Source Width & Height
BitmapImage,
TBitmapInfo(BitmapHeader^),
DIB_RGB_COLORS,
SRCCOPY)
FINALLY
VirtualFree(Bitmapheader, 0, MEM_FREE);
VirtualFree(bitmapimage, 0, MEM_FREE);
END
END {PrintBitmap};

GerHil 18. Feb 2007 16:14

Re: Drucken aus einer Form
 
Hallo bitsette,
hallo matashen,
hallo TonyR,


vielen Dank für Eure Beiträge, Ihr habt mit sehr geholfen.

Der Programm von bitsetter ist ja genial. Mit ein paar
Parameter-Änderungen funktionierte es ohne Probleme. Genau das habe ich gesucht.

Ich versuche gerade den Code nachzuvollziehen. Nicht so einfach.

Gruß GerHil


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 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