Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi Programm schlägt den Speicher voll (https://www.delphipraxis.net/45884-delphi-programm-schlaegt-den-speicher-voll.html)

DD2k3 13. Mai 2005 17:13


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;

Ultimator 13. Mai 2005 17:16

Re: Delphi Programm schlägt den Speicher voll
 
Du solltest OurImage Puffer jedesmal wieder Free'en und statt DeleteDC würde ich ReleaseCD nehmen :)

DD2k3 13. Mai 2005 17:29

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 :)

Keldorn 13. Mai 2005 17:34

Re: Delphi Programm schlägt den Speicher voll
 
google mal nach Bei Google suchenmemproof Hier im Forum suchenmemproof, das hilft dir ungemein beim Finden von Speicherlecks. Das sagt dir auch, an welcher Stelle das genau ist.

Mfg Frank

bttb930 13. Mai 2005 17:41

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.

shmia 13. Mai 2005 18:15

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