![]() |
AW: Screenshot erstellen und speichern
Zitat:
Bezüglich oben dem GetWindowDC aus der #5 ... ein GetWindowDC bzw. GetDC mit anderem Parameter (Fenster/Canvas): FindWindow FindWindowEx EnumWindows ... TForm.Handle (HWND) TForm.Canvas.Handle (HDC) ... Und bezüglich Delphi-Fenster: ![]() ![]() ... TCustomForm.Canvas und Printer. ![]() uvm. |
AW: Screenshot erstellen und speichern
Vielleicht ist das ja schon anderweitig beschrieben, dann sorry. Ich habe schon seit Jahren folgende Routine im Einsatz, die einen bestimmten Bereich des Desktop in eine Bitmap kopiert:
Delphi-Quellcode:
procedure DesktopScreenShot(DestBitmap: TBitmap; SourceRect: TRect);
var DC: HDC; wnd: HWND; begin wnd := GetDesktopWindow; DC := GetDC(wnd); try DestBitmap.SetSize(SourceRect.Width, SourceRect.Height); BitBlt(DestBitmap.Canvas.Handle, 0, 0, SourceRect.Width, SourceRect.Height, DC, SourceRect.Left, SourceRect.Top, SRCCOPY) ; finally ReleaseDC(wnd, DC); end; end; |
AW: Screenshot erstellen und speichern
PS: GetDC(GetDesktopWindow) = GetWindowDC(0), das Desktop=0
wie gesagt, tausende Wege ganz modern könnte man z.B. auch die DesktopImagingAPI (seit Win 8) benutzen, oder wie die nochmal hieß die würde dann auch so Dinge ala DirectDraw erwischen, welche sich direkt über die Grafkkarte ins Bild schmuggeln. |
AW: Screenshot erstellen und speichern
Hi,
vielleicht kannst du das mal Testen, oder zum Spicken... Viele Grüße Steku ![]() |
AW: Screenshot erstellen und speichern
Zitat:
Delphi-Quellcode:
kennt mein Compiler noch nicht. :(
DestBitmap.SetSize(..)
Grüße, Andreas |
AW: Screenshot erstellen und speichern
Hast Du denn Vcl.Graphics in den Uses eingebunden ?
![]() Das sollte es seit " ![]() Siehe weiter unten bei "VclBitmap: Vcl.Graphics.TBitmap;", das müsste VCL unter XE2 gewesen sein. |
AW: Screenshot erstellen und speichern
Ja,
Delphi-Quellcode:
ist eingebunden. Aber in meiner Unit, wo ich solche nützlichen Routinen sammle, benutzen andere Routinen auch
Vcl.Graphics
Delphi-Quellcode:
, und auch dort gibt es ein
Winapi.Windows
Delphi-Quellcode:
. Daher kommt der Konflikt.
SetSize
Wie läßt sich Uwe’s Zeile
Delphi-Quellcode:
mit qualifizierten Bezeichnern schreiben? Direkt geht es nicht, denn DestBitmap ist der Name des Parameters. Auch mit einer Zwischenvariable habe ich es noch nicht hinbekommen… :oops:
DestBitmap.SetSize(SourceRect.Width, SourceRect.Height);
Grüße, Andreas |
AW: Screenshot erstellen und speichern
Etwas habe ich noch vergessen: Ich habe in der Uses-Liste auch noch
Delphi-Quellcode:
, und auch dies hat
Vcl.Forms
Delphi-Quellcode:
und kann strören.:(
SetSize
Edit: Die Fehlermeldung lautet: [dcc32 Fehler]: E2003 Undeklarierter Bezeichner: 'SetSize' |
AW: Screenshot erstellen und speichern
Nein, weil hier ja nicht mit WITH und so gearbeitet wird und es ja explizit BitmapVariable.SetSize heißt.
Schon DelphiXE kannte ein TBitmap.SetSize (hatte es erst dieses Jahr selbst benutzt) |
AW: Screenshot erstellen und speichern
Ich würde die Funktion DesktopScreenShot erstmal in ein eigenes Unit verfrachten, nur mit dem Minimum an Abhängigkeiten,
um das Ganze im ersten Schritt etwas zu modularisieren. Dieses sollte dann in deinem Unit als Uses eingebunden eigentlich arbeiten können oder vielleicht einen besseren Fehlerhinweis liefern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 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