![]() |
Delphi Programm schlägt den Speicher voll
hi,
ich will mit einen Programm den Bildschirm aufzeichnen, und habe dazu etwas gefunden (siehe unten). Nun ist aber das Problem das Delphi nach paar minuten EOutOfResources anzeigt weil das Programm den speicher vollschlägt, und ich weis nicht warum. Es ist der Einzige teil des Quelltextes was diesen Fehler verursachen muss, aber mein wissen ist noch sehr begrenzt ;). thx schonmal
Delphi-Quellcode:
procedure ScreenShot(OurImage:TBitmap);
var DCPuffer, DC : HDC; Puffer : HBitmap; x,y: integer; begin DC := CreateDC('DISPLAY',nil,nil,nil); x := screen.Width; y := screen.height; DCPuffer := CreateCompatibleDC(DC); Puffer := CreateCompatibleBitmap(DC,x,y); SelectObject(DCPuffer,Puffer); BitBlt(DCPuffer,0,0,x,y,dc,0,0,srccopy); OurImage.Width := x; OurImage.Height := y; BitBlt(OurImage.canvas.Handle,0,0,x,y,DCPuffer,0,0,srcCopy); DeleteDC(DCPuffer); DeleteDC(DC) end; |
Re: Delphi Programm schlägt den Speicher voll
Du solltest OurImage Puffer jedesmal wieder Free'en und statt DeleteDC würde ich ReleaseCD nehmen :)
|
Re: Delphi Programm schlägt den Speicher voll
hmmm, wie kann ich ein Objekt Freen wenn es von der Procedure bereitgestellt wird ?
ReleaseDC hat keinen einfluss darauf :) |
Re: Delphi Programm schlägt den Speicher voll
|
Re: Delphi Programm schlägt den Speicher voll
was auch ein problem sein könnte ist, wenn in der projektdatei eine datei angegeben ist, die nicht existiert. ich weiß nicht warum, aber mein delphi versucht dann solange irgendwas zu machen, bis alle speicherresourcen aufgebraucht sind (die ide).
ruf einfach mal den task manager auf und sortier ihn nach speicher rückwärts im tab prozesse. wenn da delphi32.exe ganz oben steht (auch wenn nur die ide offen ist und das projekt geladen ist und sonst nichts passiert) und der speicherbedarf sich ständig erhöht, dann wird es das sein. hatte ich bei D7 schon mehrfach. |
Re: Delphi Programm schlägt den Speicher voll
Delphi-Quellcode:
procedure ScreenShot(OurImage:TBitmap);
var DCPuffer, DC : HDC; Puffer : HBitmap; x,y: integer; begin DC := CreateDC('DISPLAY',nil,nil,nil); x := screen.Width; y := screen.height; DCPuffer := CreateCompatibleDC(DC); Puffer := CreateCompatibleBitmap(DC,x,y); SelectObject(DCPuffer,Puffer); BitBlt(DCPuffer,0,0,x,y,dc,0,0,srccopy); OurImage.Width := x; OurImage.Height := y; BitBlt(OurImage.canvas.Handle,0,0,x,y,DCPuffer,0,0,srcCopy); DeleteObject(Puffer); // <=== das hast du vergessen DeleteDC(DCPuffer); DeleteDC(DC) end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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