AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Screenshot - Verständnisfrage
Thema durchsuchen
Ansicht
Themen-Optionen

Screenshot - Verständnisfrage

Ein Thema von hans ditter · begonnen am 27. Feb 2012 · letzter Beitrag vom 27. Feb 2012
 
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#1

Screenshot - Verständnisfrage

  Alt 27. Feb 2012, 15:02
Hallo alle zusammen!

Da hab ich mich letztens dumm und dämlich gesucht nach einem funktionierenden Screenshotcode und da stand er doch direkt vor meiner Nase in dem dicken Delphischmöker...

Der Code funktioniert auch prima... nur leider weiß ich nicht genau warum...

Hier erstmal der Code:
Delphi-Quellcode:
procedure ScreenshotBook(bmp: THandle);stdcall;
var ScreenDC, CompDC: HDC;
    ScreenBitmap: HBitmap;
    h: THandle;
begin
  ScreenDC := GetDC(0); //DC des gesamten Bildschirm abfragen
  CompDC := CreateCompatibleDC(ScreenDC); //einen neuen DC anlegen, der gleich dem DC vom Bildschirm ist??
  ScreenBitmap := CreateCompatibleBitmap(ScreenDC,
                  GetDeviceCaps(ScreenDC,HORZRES),
                  GetDeviceCaps(ScreenDC,VERTRES)); //hä? ein Bitmap wird angelegt ... und dann?
  h := SelectObject(CompDC,ScreenBitmap); //das versteh ich auch nicht so genau...
  BitBlt(CompDC,0,0,GetDeviceCaps(ScreenDC,HORZRES),
         GetDeviceCaps(ScreenDC,VERTRES),ScreenDC,0,0,SRCCOPY); //klar, hier wird der Inhalt aus ScreenDC in CompDC kopiert
  BitBlt(bmp,0,0,300,300,compDC,0,0,SRCCOPY); //Inhalt von CompDC in ein mitgeliefertes Handle

  DeleteObject(SelectObject(CompDC,h)); //?? und vor allem: warum selectObject in deleteObject??
  DeleteDC(CompDC); //künstlich erzeugtes DC freigeben
  ReleaseDC(0,ScreenDC); //Freigeben des abgefragten Bildschrim-DCs
end;
Erstens frage ich mich, ob das wirklich so umständlich sein muss?! Warum frage ich den Bildschirm-DC ab, erzeuge dann ein neuen DC und kopier aus dem Bildschirm-DC den Inhalt in den neuen DC um den da dann wieder rauszukopieren? Das ist doch irgendwie doppelt gemoppelt!

Und dann versteh ich die Schritte mit SelectObject und CreateCompatibleBitmap nicht, geschweige denn das DeleteObject(SelectObject()).

Ich hoffe ihr könnte mir helfen!

LG; hans ditter

//EDIT:

Ach ja, und eine Frage hätte ich noch: Warum geht das nur mit Form.Canvas.Handle bzw. Paintbox.Canvas.Handle nicht aber mit Image1.Picture.Bitmap.Handle (vlt wegen HBITMAP?) oder Image.Picture.Bitmap.Canvas.Handle?
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!

Geändert von hans ditter (27. Feb 2012 um 15:15 Uhr)
  Mit Zitat antworten Zitat
 


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 19:35 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