Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Panel zu Bitmap konvertieren funktioniert nur im sichtbaren Bereich (https://www.delphipraxis.net/204491-panel-zu-bitmap-konvertieren-funktioniert-nur-im-sichtbaren-bereich.html)

DelphiDude 1. Jun 2020 14:41

Panel zu Bitmap konvertieren funktioniert nur im sichtbaren Bereich
 
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.

himitsu 1. Jun 2020 16:08

AW: Panel zu Bitmap konvertieren funktioniert nur im sichtbaren Bereich
 
Tja, das ist halt so, es wird alles (Windows und ihr DC) auf die Größe des Desktops begrenzt, was sich irgendwie auf dem Desktop befindet.

DelphiDude 1. Jun 2020 16:23

AW: Panel zu Bitmap konvertieren funktioniert nur im sichtbaren Bereich
 
Die Panel.PaintTo(Canvas,X,Y) Methode ist das was ich gebraucht habe.
Den Ziel-Canvas sollte man vorher in Höhe und Breite anpassen und danach Canvas.Lock() aufrufen.
nach der PaintTo()-Methode, wieder Canvas.Unlock()


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