Es sind im Endeffekt zwei voneinander völlig unabhängige Fragen:
- Wie erfasse ich einen Teil des Bildschirminhalts oder den Inhalt eines TWinControl (Form, Panel, Frame, ...)?
- Wie drucke ich diese Grafik aus?
Wenn ich das richtig rauslese steckst du an Punkt 1.
Der Bildschirm besteht aus Pixeln. Du kannst also praktisch nur eine Pixeltapete (Bitmap) aufnehmen, keinen glatten Text wie in einem Word-Dokument.
Das einfachste ist ein Ansatz wie "Mach mir ein Bitmap von diesem Panel". Oder Frame. Oder Form. Alles, was unter Windows praktisch ein "Fenster" (TWinControl) ist.
Also wenn ich auf meinem Button1 hier
Sage "Mache mir ein Bitmap von Panel1", kommt das hier raus:
Ist das, was du willst? Wenn ja, hier ein Minimalbeispiel:
Delphi-Quellcode:
unit Unit1;
interface
uses
System.SysUtils,
System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls,
Vcl.ExtCtrls;
type
TForm1 =
class(TForm)
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
CheckBox1: TCheckBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
TWinControlHelper =
class helper
for TWinControl
function CreateBitmap(): TBitmap;
end;
var
Form1: TForm1;
implementation uses WinApi.Windows;
{$R *.dfm}
{ TWinControlHelper }
function TWinControlHelper.CreateBitmap():
Vcl.Graphics.TBitmap;
var
DC: HDC;
begin
DC := GetWindowDC(
Handle);
try
Result :=
Vcl.Graphics.TBitmap.Create();
try
Result.SetSize(ClientWidth, ClientHeight);
BitBlt(
Result.Canvas.Handle,
0, 0, Result.Width, Result.Height,
DC, 0, 0,
WinApi.Windows.SRCCOPY
);
except
Result.Destroy();
raise;
end;
finally
ReleaseDC(
Handle,
DC);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
bitmapOfPanel:
Vcl.Graphics.TBitmap;
begin
bitmapOfPanel := Panel1.CreateBitmap();
try
bitmapOfPanel.SaveToFile('
c:\users\günther\Desktop\myBitmap.bmp');
finally
bitmapOfPanel.Destroy();
end;
end;
end.