Hallo Leute,
mit folgender Funktion mache ich einen Screenshot:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TForm1.ScreenCapture(Bmp: TBitmap; Oben, Links, Hoehe, Breite: Integer); var DeskWnd: HWnd; DeskDC: HDC; DeskCv: TCanvas; R: TRect; W, H: Integer; begin if Bmp = nil then Exit; DeskWnd := GetDesktopWindow; DeskDC := GetWindowDC(DeskWnd); DeskCv := TCanvas.Create; DeskCv.Handle := DeskDC; W := Breite; H := Hoehe; R := Bounds(Links, Oben, W, H); try Bmp.HandleType := bmDIB; Bmp.PixelFormat := pf24Bit; Bmp.Width := W; Bmp.Height := H; Bmp.Canvas.CopyMode := cmSrcCopy; Bmp.Canvas.CopyRect(R, DeskCv, R); finally DeskCv.Free; ReleaseDC(DeskWnd, DeskDC); end; end; |
Das funktioniert auch ganz gut, wenn "Oben" und "Links" = 0 ist und "Hoehe" und "Breite" die gesamte Bildschirmgröße.
Ich möchte aber auch gerne Screenshots von nur einem ausgewählten Bereich machen.
Dazu öffne ich eine Form2. Diese kann in Größe und Position geändert werden. Wird diese geschlossen, werden die Werte "Oben", "Links", "Hoehe" und "Breite" der Form2 in meine Edit-Felder gespeichert.
So rufe ich die Screenshotfunktion auf:
Delphi-Quelltext
1: 2:
| ScreenCapture(Bmp, StrToInt(edtX.Text), StrToInt(edtY.Text), StrToInt(edtHeight.Text), StrToInt(edtWidth.Text)); Bmp2Jpg(BMP, 100, sFileName); |
Wie gesagt, den kompletten Screen funktioniert einwandfrei.
Mein Problem ist, dass die Screenshots vom ausgewählten Bereich zwar erstellt werden (auch in der angegebenen Größe), aber dass die Bilder einfach nur weiß sind. Hat jemand eine Idee was das sein könnte?
Greetz