Entwickler-Ecke
Multimedia / Grafik - GetWindowDC(GetDesktopWindow) - HÄ?
phase - Di 04.03.03 15:02
Titel: GetWindowDC(GetDesktopWindow) - HÄ?
Hi erstmal,
mit folgender Funktion kann man die Farbe eines Pixels auf dem Desktop ermitteln:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| function DesktopColor(const x,y:integer):TColor; var c: TCanvas; begin c:=TCanvas.create; c.handle:=GetWindowDC(GetDesktopWindow); result:=getpixel(c.handle,x,y); c.free; end; |
Das Problem ist jedoch, dass ein Programm, welches in einer Schleife alle 10ms diese Funktion ausführt, stetig an (Arbeits-)Speicher zunimmt, bis es irgendwann abstürzt. Manchmal kommt die Fehlermeldung "Canvas does not allow drawing." (Es geht bei 1.900 MB los, und stürzt bei ca. 7.200 MB ab)
Ich habe den Quelltext mehrmals durchgesehen und garantiert nirgendwo vergessen irgendein Objekt freizugeben.
Woran kann das ganze liegen?
Danke im Vorraus,
phase
mth - Di 04.03.03 15:47
Titel: Re: GetWindowDC(GetDesktopWindow) - HÄ?
| phase hat folgendes geschrieben: |
Ich habe den Quelltext mehrmals durchgesehen und garantiert nirgendwo vergessen irgendein Objekt freizugeben.
Woran kann das ganze liegen?
|
Aber natürlich hast du ein Objekt (eine Resource) nicht freigegenen: Den Device Context (DC). Auf ein GetWindowDC muß irgendwann ein ReleaseDC folgen.
phase - Di 04.03.03 16:35
Aha, größten Dank!
Ich werde mich sogleich betätigen...
(Ich muss gestehen, dass ich die Funktion einfach nur us dem Internet übernommen habe)
Gruß,
phase
maximus - Di 04.03.03 19:58
Wenn dein prog tausende mal auf den desktop zugreift, würd ich mir den DeviceContext und das canvas nur einmal erstellen/freigeben...alles andere wäre programmiererischer wahnsinn :wink:
Quasi die procedure aufteilen. In eine Init, get, deInit procedure!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!