Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi EOutOfResources bei resize (https://www.delphipraxis.net/98343-eoutofresources-bei-resize.html)

ebber 25. Aug 2007 16:41


EOutOfResources bei resize
 
Hallo

wenn ich meine Form resize dann kommt dieser Fehler :

Delphi-Quellcode:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Lampen.exe ist eine Exception der Klasse EOutOfResources mit der Meldung 'Für diesen Befehl ist nicht genügend Speicher verfügbar.
' aufgetreten.
---------------------------
Anhalten  Fortsetzen  Hilfe  
---------------------------

Delphi-Quellcode:

procedure TForm11.FormResize(Sender: TObject);
begin

      TimerRefresh.Enabled := false;

   CircleScope.Free;

        CircleScope := TCircleScope.Create(PaintFrame.Width, PaintFrame.Height);
   CircleScope.Pen:= $00804000;
   CircleScope.Offset := TrBOffset.Position;
   CircleScope.Radius := TrBRadius.Position;

      TimerRefresh.Enabled := true;

end;
Hier soll das alte CircleScope zerstört und ein neues erstellt werden. Beim jedem resize braucht das ding ca. 50MB mehr Speicher. Da ist der bald voll. Zerstöre ich das irgendwie nicht richtig ?

MfG

Bernhard Geyer 25. Aug 2007 17:00

Re: EOutOfResources bei resize
 
Ich vermute TCircleScope hat interne Speicherlücken.

Häng FastMM4 und lass dir die Speicherlücken ausgeben.

DGL-luke 25. Aug 2007 17:10

Re: EOutOfResources bei resize
 
anscheinend gibt es seinen speicher nicht anständig frei. Schau dir mal die Destruktoren an.

Dunkel 25. Aug 2007 17:18

Re: EOutOfResources bei resize
 
Warum muss das Objekt CircleScope überhaupt beim Resizen zerstört & neu erstellt werden? Reicht nicht eine Parameterübergabe der geänderten Größe an CircleScope?

semo 25. Aug 2007 18:12

Re: EOutOfResources bei resize
 
heir einmal der constructor dieser klasse:

Delphi-Quellcode:
     
      Constructor TCircleScope.Create(Width, Height : Integer);
      begin
        VisBuff := TBitmap.Create;
        BackBmp := TBitmap.Create;

          VisBuff.Width := Width;
          VisBuff.Height := Height;
          BackBmp.Width := Width;
          BackBmp.Height := Height;

          BkgColor := clBlack;
          ScopeRad := 30;
          ScopeOff := 30;
          PenColor := clWhite;
          DrawType := 0;
          DrawRes := 2;
          FrmClear := True;
          UseBkg := False;
      end;
der desctructor ist leider nicht in der unit aufzufinden?!
wie doof ist das denn?

bernau 25. Aug 2007 18:34

Re: EOutOfResources bei resize
 
Zitat:

Zitat von computer-glossar.de
heir einmal der constructor dieser klasse:

Delphi-Quellcode:
     
      Constructor TCircleScope.Create(Width, Height : Integer);
      begin
        VisBuff := TBitmap.Create;
        BackBmp := TBitmap.Create;

      end;
der desctructor ist leider nicht in der unit aufzufinden?!
wie doof ist das denn?

Es werden zwei Bitmap erzeugt. Da der Destructor nicht vorhanden ist, werden diese zwei Bitmap nicht freigegeben. Lege den Destructor für TCircleScope an und gib die beiden Bitmap frei.


Delphi-Quellcode:
     
Destructor TCircleScope.destroy;
  begin
    VisBuff.free
    BackBmp.free;
    inherited
  end;

ebber 25. Aug 2007 18:50

Re: EOutOfResources bei resize
 
Danke. Jetzt funktionierts.
Respekt, wie gleich jemand die Klasse gefunden hat. :thumb:

MfG

semo 25. Aug 2007 19:24

Re: EOutOfResources bei resize
 
google is your best friend :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 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