AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bildschirmfoto knipst nicht alles
Thema durchsuchen
Ansicht
Themen-Optionen

Bildschirmfoto knipst nicht alles

Ein Thema von KodeZwerg · begonnen am 29. Mai 2018 · letzter Beitrag vom 4. Jun 2018
Antwort Antwort
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Bildschirmfoto knipst nicht alles

  Alt 31. Mai 2018, 16:31
Zitat:
da auch noch nicht so ganz gecheckt habe wieso einer Methode a) nimmt und anderer Methode b)
Solange du nur einen Monitor unterstützen willst wäre die zweite Methode angebracht.
Willst du Multimonitor unterstützen dann die erste.

gruss
Wie kommst Du auf diese Aussage?
Bei Invalidate wird Windows mitgeteilt, dass das Fenster neu gezeichnet werden soll. In dem Fall das Image.

Blick in die Source von refresh:

das ruft Repaint auf
Repaint:

Delphi-Quellcode:
Invalidate
Update;
Im Normalfall ist es so das ein Invalidate ausreichen sollte. Windows kümmert sich dann darum, wann das Zeichnen passieren soll. WM_PAINT wird mit einer geringeren Priorität ausgelöst.

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

kommt also immer darauf an was Du erwartest.
Bei Refresh und co ist die Systemlast höher, da immer sofort gezeichnet wird.

Aber mit Multimonitor hat das rein gar nichts zu tun
Fritz Westermann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Bildschirmfoto knipst nicht alles

  Alt 31. Mai 2018, 17:03
Zitat:
Bei Invalidate wird Windows mitgeteilt, dass das Fenster neu gezeichnet werden soll. In dem Fall das Image.
Es hat niemand über Invalidate gesprochen.

Sondern darüber welche Funktion er verwenden soll.
Die erste oder die zweite Methode.

Methode A:
Delphi-Quellcode:
Function CaptureScreen(var hbmp: HBITMAP): Boolean;
var
   hDCScreen, hDCMem : HDC;
   cx, cy: Integer;
   hBmpOld: HBITMAP;
   dwRop: DWORD;
begin
   hDCScreen := CreateDC('DISPLAY', 0, 0, 0);
   cx := GetDeviceCaps(hDCScreen, HORZRES);
   cy := GetDeviceCaps(hDCScreen, VERTRES);
   hDCMem := CreateCompatibleDC(hDCScreen);
   hbmp := CreateCompatibleBitmap(hDCScreen, cx, cy);
   hBmpOld := SelectObject(hDCMem, hbmp);
   dwRop := SRCCOPY or CAPTUREBLT;
   Result := BitBlt(hDCMem, 0, 0, cx, cy, hDCScreen, 0, 0, dwRop);
   SelectObject(hDCMem, hBmpOld);
   DeleteDC(hDCMem);
   DeleteDC(hDCScreen);
end;
Methode B:
1. GetDesktopWindow
2. GetDC\CreateDC
3. GetWindowRect
4. StretchBlt via BitBlt.
5. ReleaseDC

Was hat das jetzt mit Invalidate zu tun?

Das!
Zitat:
Oder warum benutzt einer nach knipsen ein image.invalidate und ein anderer image.refresh.. all solche Sachen da muss ich noch viel blättern damit ich die zusammenhänge Verstehe bzw was Überhaupt die Unterschiede sind, für mich ists irgendwie das selbe.
Ist wieder eine andere Frage worauf ich aber nicht geantwortet habe.
Du musst das schon auseinander halten.

gruss

Geändert von EWeiss (31. Mai 2018 um 17:08 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Bildschirmfoto knipst nicht alles

  Alt 31. Mai 2018, 17:10
Zitat:
Oder warum benutzt einer nach knipsen ein image.invalidate und ein anderer image.refresh
Da habe ich wohl die lokalen Variablen a und b falsch initialisiert....
Sorry, nix für Ungut, dann kennt er jetzt zumindest den Unterschied zwischen I und R:
Fritz Westermann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Bildschirmfoto knipst nicht alles

  Alt 31. Mai 2018, 17:11
Zitat:
Oder warum benutzt einer nach knipsen ein image.invalidate und ein anderer image.refresh
Da habe ich wohl die lokalen Variablen a und b falsch initialisiert....
Sorry, nix für Ungut, dann kennt er jetzt zumindest den Unterschied zwischen I und R:
Dito! Danke.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:05 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