![]() |
Problem bei Screenshoterstellung mit Image-Kompo
Ich versuche ein Screenshot mit folgendem Code zu machen:
Delphi-Quellcode:
Der Aufruf:
procedure TCover.ScreenToFile(aFileName: string);
var Bitmap: TBitmap; JPG : TJPEGImage; Canvas: TCanvas; begin Canvas := TCanvas.Create; try Canvas.Handle := GetWindowDC(0); Application.ProcessMessages; try Bitmap := TBitmap.Create; Application.ProcessMessages; JPG := TJPEGImage.Create; Bitmap.PixelFormat:=pf32bit; Application.ProcessMessages; try Bitmap.Width := Screen.DesktopWidth; Bitmap.Height:= Screen.DesktopHeight; Bitmap.PixelFormat := pfDevice; Application.ProcessMessages; BitBlt(Bitmap.Canvas.Handle, 0, 0, Pred(Screen.DesktopWidth), Pred( Screen.DesktopHeight), Canvas.Handle, Screen.DesktopLeft, Screen.DesktopTop, Bitmap.Canvas.CopyMode); Application.ProcessMessages; //Kompression JPG.CompressionQuality:=50; JPG.Assign(Bitmap); Application.ProcessMessages; if fileexists(aFileName) then deletefile(aFileName); JPG.SaveToFile(aFileName); finally //Größe //resizepictur(aFileName,300,300); Bitmap.Free; JPG.Free; end; finally ReleaseDC(0, Canvas.Handle); Application.ProcessMessages; end; finally Canvas.Free; end; end;
Delphi-Quellcode:
Die in einer Image-Kompo zur Laufzeit über OpenPictureDialog geladenen Bilder werden einfach ignoriert. Lege ich ein Bild zur Entwurfszeit fest, funktioniert alles wunderbar.
procedure TCover.JvTransparentButton1Click(Sender: TObject);
begin ScreenToFile('Screen1.jpg'); end; Wo könnte der Haken sein? |
Re: Problem bei Screenshoterstellung mit Image-Kompo
Zeige doch mal den Code, der nicht funktioniert. Deine Prozedur ScreenToFile() scheint ja keine Probleme zu haben - wenn ich dich richtig verstehe. Die Aufrufe von Application.ProcessMessages kannst du dir wohl schenken und auch das vorsorgliche Löschen einer etwa bereits vorhandenen Ausgabedatei dürfte nichts bringen.
marabu |
Re: Problem bei Screenshoterstellung mit Image-Kompo
Das war schon die gesamte Procedur die für den Sreen zuständig ist. Leider werden zur Laufzeit geladene Bilder ignoriert und durch das schon zur Entwurfszeit festgelegte Bild ersetzt.
|
Re: Problem bei Screenshoterstellung mit Image-Kompo
Ich kann dir gerade nicht so recht folgen. Du hattest von einem OpenPictureDialog geschrieben, über den du zur Laufzeit ein Bild in eine TImage-Komponente lädst. Das hat doch mit deiner Speicher-Routine nichts zu tun?
Funktioniert deine Routine ScreenToFile() nun oder vermutest du darin einen Fehler? marabu |
Re: Problem bei Screenshoterstellung mit Image-Kompo
Ja, ich lade zur Laufzeit über OpenPictureDialog ein Bild in die besagte Image-Kompo. Die Routine verhält sich so, wie sie sein soll. Es wird alles "abgelichtet" bis auf das geladene Bild. Ich schmeiß meinen Rechner gleich aus dem Fenster.
|
Re: Problem bei Screenshoterstellung mit Image-Kompo
Was meinst du mit besagter Image-Komponente? Etwa TCover?
marabu |
Re: Problem bei Screenshoterstellung mit Image-Kompo
Nein, TImage. Vielleicht liegt es daran, daß ich das Form als verfügbares Formular bereitstelle?
|
Re: Problem bei Screenshoterstellung mit Image-Kompo
Hallo Mario,
heute ist wohl nicht mein Tag. Ich erkenne einfach nicht, was deine TImage-Komponente mit dem gezeigten Code zu tun haben soll. Eine funktionierende Funktion (GrabImage) um den Bildschirminhalt in ein Bitmap zu speichern habe ich dir in einem anderen thread schon angeboten. Die Zuweisung per Assign an ein JPegImage dürfte kein Problem darstellen.
Delphi-Quellcode:
Deprimierte Grüße
var
jpg: TJpegImage; bm: TBitmap; begin bm := GrabImage(GetDesktopWindow); with TJpegImage.Create do begin // ... Assign(bm); if SaveDialog.Execute then SaveToFile(SaveDialog.FileName); Free; end; bm.Free; end; marabu |
Re: Problem bei Screenshoterstellung mit Image-Kompo
@marabu. Mein Tag scheint dies heute auch nicht zu sein. Das Problem war so banal, dass man schon wieder drüber lachen könnte.
Vorher:
Delphi-Quellcode:
Nachher:
procedure TCover.JvTransparentButton1Click(Sender: TObject);
begin ScreenToFile('Screen1.jpg'); end;
Delphi-Quellcode:
Es wurde immer das aktuelle Screen erzeugt. Nur ohne Pfadangabe verrirrt sich jederman auf seinen Festplatten.
procedure TCover.JvTransparentButton1Click(Sender: TObject);
begin ScreenToFile('C:\Screen1.jpg'); end; Trotzdem Danke für Deine Kopfschmerzen. Das Wetter kann einen ja auch auf dem Keks gehen. Beste Grüße Mario |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz