Hallo,
ich versuche derzeit ein Panel oder eine Form mit mehreren grafischen Komponenten sozusagen als Screenshot in ein JPEG-File abzuspeichern. In den Delphi-Foren gibt es einige Beispiele die mir auch schon etwas weitergeholfen und zu der Funktion unten geführt haben. Aber es gibt noch folgendes Problem:
Es wird immer nur das weggeschrieben, was gerade auf dem Screen im Bereich der Form/des Panels sichtbar ist. Solange die Form im Vordergrund komplett sichtbar ist funktioniert alles, wenn aber ein anderes Fenster davor gerät oder das Fenster minimiert wird oder der Bildschirmschoner zuschlägt klappt es aber nicht mehr. Es wird immer das weggeschrieben was gerade im Bereich der Form auf dem Screen sichtbar ist. Das liegt wohl am Kopieren mit der Funktion bitblt über das Canvas-Handle des Panels.
Hat jemand eine Idee wie man das richtig machen kann?
Viele Grüße
Gary
TYPE
TCanvasPanel = CLASS( TPanel)
public
property Canvas;
end;
procedure TForm1.BitBtnSaveGraphicClick(Sender: TObject);
var
BMP:TBitmap;
JPEG:TJPEGImage;
begin
BMP := NIL;
JPEG := NIL;
TRY // Lade in eine Bitmap
BMP:=TBitmap.Create;
BMP.Width:= Form2.CanvasPanel1.Width;
BMP.Height:= Form2.CanvasPanel1.Height;
bitBlt(BMP.Canvas.Handle,0,0,Form2.CanvasPanel1.Wi dth,Form2.CanvasPanel1.Height,
Form2.CanvasPanel1.Canvas.Handle,0,0,SRCCopy);
// Konvertiere zu JPEG
JPEG:=TJPEGImage.Create;
JPEG.Performance:=jpBestQuality;
JPEG.CompressionQuality:=100;
JPEG.Assign(BMP);
JPEG.SaveToFile( SaveDialog1.FileName );
Finally
BMP.Free;
JPEG.Free;
end;
end;
ich versuche derzeit ein Panel oder eine Form mit mehreren grafischen Komponenten sozusagen als Screenshot in ein JPEG-File abzuspeichern. In den Delphi-Foren gibt es einige Beispiele die mir auch schon etwas weitergeholfen und zu der Funktion unten geführt haben. Aber es gibt noch folgendes Problem:
Es wird immer nur das weggeschrieben, was gerade auf dem Screen im Bereich der Form/des Panels sichtbar ist. Solange die Form im Vordergrund komplett sichtbar ist funktioniert alles, wenn aber ein anderes Fenster davor gerät oder das Fenster minimiert wird oder der Bildschirmschoner zuschlägt klappt es aber nicht mehr. Es wird immer das weggeschrieben was gerade im Bereich der Form auf dem Screen sichtbar ist. Das liegt wohl am Kopieren mit der Funktion bitblt über das Canvas-Handle des Panels.
Hat jemand eine Idee wie man das richtig machen kann?
Viele Grüße
Gary
TYPE
TCanvasPanel = CLASS( TPanel)
public
property Canvas;
end;
procedure TForm1.BitBtnSaveGraphicClick(Sender: TObject);
var
BMP:TBitmap;
JPEG:TJPEGImage;
begin
BMP := NIL;
JPEG := NIL;
TRY // Lade in eine Bitmap
BMP:=TBitmap.Create;
BMP.Width:= Form2.CanvasPanel1.Width;
BMP.Height:= Form2.CanvasPanel1.Height;
bitBlt(BMP.Canvas.Handle,0,0,Form2.CanvasPanel1.Wi dth,Form2.CanvasPanel1.Height,
Form2.CanvasPanel1.Canvas.Handle,0,0,SRCCopy);
// Konvertiere zu JPEG
JPEG:=TJPEGImage.Create;
JPEG.Performance:=jpBestQuality;
JPEG.CompressionQuality:=100;
JPEG.Assign(BMP);
JPEG.SaveToFile( SaveDialog1.FileName );
Finally
BMP.Free;
JPEG.Free;
end;
end;
Comment