AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Delphi Programm schlägt den Speicher voll
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi Programm schlägt den Speicher voll

Ein Thema von DD2k3 · begonnen am 13. Mai 2005 · letzter Beitrag vom 13. Mai 2005
Antwort Antwort
DD2k3

Registriert seit: 13. Mai 2005
2 Beiträge
 
Delphi 7 Professional
 
#1

Delphi Programm schlägt den Speicher voll

  Alt 13. Mai 2005, 18:13
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;
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Delphi Programm schlägt den Speicher voll

  Alt 13. Mai 2005, 18:16
Du solltest OurImage Puffer jedesmal wieder Free'en und statt DeleteDC würde ich ReleaseCD nehmen
Julian J. Pracht
  Mit Zitat antworten Zitat
DD2k3

Registriert seit: 13. Mai 2005
2 Beiträge
 
Delphi 7 Professional
 
#3

Re: Delphi Programm schlägt den Speicher voll

  Alt 13. Mai 2005, 18:29
hmmm, wie kann ich ein Objekt Freen wenn es von der Procedure bereitgestellt wird ?

ReleaseDC hat keinen einfluss darauf
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Delphi Programm schlägt den Speicher voll

  Alt 13. Mai 2005, 18:34
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

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#5

Re: Delphi Programm schlägt den Speicher voll

  Alt 13. Mai 2005, 18:41
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Delphi Programm schlägt den Speicher voll

  Alt 13. Mai 2005, 19:15
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;
Andreas
  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 05:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz