Einzelnen Beitrag anzeigen

DelphiDude

Registriert seit: 13. Feb 2020
10 Beiträge
 
#1

Panel zu Bitmap konvertieren funktioniert nur im sichtbaren Bereich

  Alt 1. Jun 2020, 15:41
Ich hab ein Panel in einer Scrollbox, das Panel wächst und schrumpft zur Laufzeit.
Ich möchte das Panel als Bild ausdrucken können also dachte ich mir, ich packs erstmal in eine TBitnmap.

Code:
function TForm1.PanelToBmp(Panel:TPanel):TBitmap;
var
  bmp:TBitmap;
  DC:HDC;
begin
  bmp:=TBitmap.Create();
  bmp.Width:=Panel.Width;
  bmp.Height:=Panel.Height;
  DC:=GetDc(Panel.Handle);
  BitBlt(bmp.canvas.handle,0,0,Panel.Width,Panel.Height,DC,0,0,SRCCOPY);
  ReleaseDC(Panel.handle,DC);
  result:=bmp;
end;

procedure TForm1.ButtonDruckenClick(Sender: TObject);
var
  PBM:TBitmap;
begin
  PBM:=PanelToBmp(Panel1);
  try
    Image1.Width:=Panel1.Width;
    Image1.Height:=Panel1.Height;
    Image1.Picture.Bitmap.Assign(PBM);

  finally
    FreeAndNil(PBM);
  end;
end;

Das funktioniert gut solange das Panel noch auf den Bildschirm passt.
Wächst das Panel jetzt auf 3000px * 3000px an und man müsste scrollen um das Ende zu sehen, dann wird das Bitmap zwar in
der passenden Größe erstellt, aber man bekommt nur den Bildschirmbereich reinkopiert (also auch die Komponenten um das Panel herum), alles was über
den Bildschirm hinausgeht wird weiß dargestellt.

Weiß jemand was ich machen kann damit das ganze Panel kopiert wird?
Muss ich Schritt für Schritt das Panel Scrollen und die Bitmaps zusammenflicken?

Canvas.CopyRect hab ich auch versucht, liefert dasselbe Ergebnis.
  Mit Zitat antworten Zitat