AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Screenshot erstellen und speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Screenshot erstellen und speichern

Ein Thema von Z32 · begonnen am 26. Aug 2006 · letzter Beitrag vom 10. Okt 2022
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#11

AW: Screenshot erstellen und speichern

  Alt 10. Okt 2022, 11:36
Ich habe in keinem Wort gefragt "wie" ein Screenshot gemacht wird - Das war mir schon klar
Ja klar, aber entsprechend dem Wie gibt es auch unterschiedliche Antworten, bezüglich dem "wie weiter"

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:
Delphi-Referenz durchsuchenTCustomForm.Print
Delphi-Referenz durchsuchenTCustomForm.GetFormImage
...
TCustomForm.Canvas und Printer.Delphi-Referenz durchsuchenCanvas.Draw
uvm.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (10. Okt 2022 um 11:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#12

AW: Screenshot erstellen und speichern

  Alt 10. Okt 2022, 11:43
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#13

AW: Screenshot erstellen und speichern

  Alt 10. Okt 2022, 11:46
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (10. Okt 2022 um 11:48 Uhr)
  Mit Zitat antworten Zitat
Steku

Registriert seit: 12. Mai 2008
181 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#14

AW: Screenshot erstellen und speichern

  Alt 10. Okt 2022, 12:27
Hi,

vielleicht kannst du das mal Testen, oder zum Spicken...

Viele Grüße
Steku

http://www.frontiernet.net/~w2m/apprehend.html
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
711 Beiträge
 
Delphi XE5 Professional
 
#15

AW: Screenshot erstellen und speichern

  Alt 10. Okt 2022, 17:28
...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;
Sind da irgendwelche "neueren" Features dabei Uwe, denn unter XE5 kann ich Deine Routine leider nicht kompilieren: DestBitmap.SetSize(..) kennt mein Compiler noch nicht.
Grüße, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#16

AW: Screenshot erstellen und speichern

  Alt 10. Okt 2022, 17:38
Hast Du denn Vcl.Graphics in den Uses eingebunden ?
https://docwiki.embarcadero.com/Libr...Bitmap.SetSize
Das sollte es seit "Ewigkeiten" so geben.
Siehe weiter unten bei "VclBitmap: Vcl.Graphics.TBitmap;", das müsste VCL unter XE2 gewesen sein.

Geändert von Rollo62 (10. Okt 2022 um 17:41 Uhr)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
711 Beiträge
 
Delphi XE5 Professional
 
#17

AW: Screenshot erstellen und speichern

  Alt 10. Okt 2022, 18:03
Ja, Vcl.Graphics ist eingebunden. Aber in meiner Unit, wo ich solche nützlichen Routinen sammle, benutzen andere Routinen auch Winapi.Windows , und auch dort gibt es ein SetSize . Daher kommt der Konflikt.
Wie läßt sich Uwe’s Zeile
DestBitmap.SetSize(SourceRect.Width, SourceRect.Height); 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…
Grüße, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
711 Beiträge
 
Delphi XE5 Professional
 
#18

AW: Screenshot erstellen und speichern

  Alt 10. Okt 2022, 18:10
Etwas habe ich noch vergessen: Ich habe in der Uses-Liste auch noch Vcl.Forms , und auch dies hat SetSize und kann strören.

Edit:
Die Fehlermeldung lautet: [dcc32 Fehler]: E2003 Undeklarierter Bezeichner: 'SetSize'
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (10. Okt 2022 um 18:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#19

AW: Screenshot erstellen und speichern

  Alt 10. Okt 2022, 18:26
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#20

AW: Screenshot erstellen und speichern

  Alt 10. Okt 2022, 18:35
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 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