AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pobleme mit FREE (bzw. Destroy)

Ein Thema von DoktorD · begonnen am 3. Mär 2008 · letzter Beitrag vom 3. Mär 2008
Antwort Antwort
Seite 2 von 2     12   
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 12:48
Wie sieht den TForm2 aus?
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 12:55
Hallo,

in FastMM4Options.Inc die in der MessageBox gezeigten
Compiler-Schalter enabled ($define ..}

und noch mal:
Warum wir TForm2 erzeugt, aber nicht freigegeben ?
Das ist dein 1. mem leak .

Merke die Form-Variable global unbd guib sie wieder frei,
wenn du das nächste Fenster erzeugst.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 12:56
Und GetFormImage erzeugt AFAIK auch bei jedem Aufruf eine neue Bitmap, die man wieder freigeben muss.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#14

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 13:05
Huch, gleich so viele antworten.

Zitat von mkinzler:
Wie sieht den TForm2 aus?
Wenn ich Form2 mit Close schließe ist doch der Speicher frei gegeben, oder?

Delphi-Quellcode:
unit UntModalesFenster;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Close;
end;

end.


Zitat von DeddyH:
Und GetFormImage erzeugt AFAIK auch bei jedem Aufruf eine neue Bitmap, die man wieder freigeben muss.
Wie gebe ich den frei?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 13:07
Zitat von DoktorD:
Wie gebe ich den frei?
Mit Free.
Delphi-Quellcode:
var bm: TBitmap;
begin
  bm := GetFormImage;
  try
    //irgendwas mit dem Bitmap machen
    ...
  finally
    bm.Free;
  end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 13:13
Zitat:
Wenn ich Form2 mit Close schließe ist doch der Speicher frei gegeben, oder?
Nein. das Formular wird nur geschlossen.
Markus Kinzler
  Mit Zitat antworten Zitat
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#17

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 13:23
Tatsächlich. Jetzt klappts. Super. Ich weiß aber immer noch nicht warum?

Hier erstmal der neue Code
Delphi-Quellcode:
procedure TFrmMain.Verschleiern(Status: Boolean);
var
  bm : TBitmap;
begin
  if Status = TRUE then
  begin
    PanelVerschleiern := TPanel.Create(nil);
    PanelVerschleiern.Parent := FrmMain;
    PanelVerschleiern.Align := alclient;
    PanelVerschleiern.Visible := FALSE;
    PanelVerschleiern.BevelOuter := bvNone;

    ImageVerschleiern := TImage.Create(PanelVerschleiern);
    ImageVerschleiern.Parent := PanelVerschleiern;
    ImageVerschleiern.Align := alclient;

    bm := self.GetFormImage;
    try
      ImageVerschleiern.Picture.Bitmap := bm;
    finally
      bm.Free;
    end;

    AlphaBlendRect(ImageVerschleiern.Canvas,PanelVerschleiern.ClientRect,clblack,80);

    PanelVerschleiern.Show;
  end
  else
  begin
    PanelVerschleiern.Hide;
    FreeAndNil( ImageVerschleiern);
    FreeAndNil( PanelVerschleiern);
  end;
end;
Was ist denn nun der unterschied? Ob ich das Bitmap gleich zuordne, ...
ImageVerschleiern.Picture.Bitmap := self.GetFormImage;
...oder erst über eine neue Variable?
Delphi-Quellcode:
    bm := self.GetFormImage;
    try
      ImageVerschleiern.Picture.Bitmap := bm;
    finally
      bm.Free;
    end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 13:30
Das sollte nur ein Beispiel sein. Eigentlich müsste es auch so gehen (ungetestet):FreeAndNil(ImageVerschleiern.Picture.Bitmap); Das natürlich, bevor Du das Image selbst freigibst.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#19

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 13:42
Das hatte ich so gemacht. Und da ging es nicht. Komisch

Trotzdem vielen Dank an alle!!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 09:28 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