![]() |
Re: Pobleme mit FREE (bzw. Destroy)
Wie sieht den TForm2 aus?
|
Re: Pobleme mit FREE (bzw. Destroy)
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 |
Re: Pobleme mit FREE (bzw. Destroy)
Und GetFormImage erzeugt AFAIK auch bei jedem Aufruf eine neue Bitmap, die man wieder freigeben muss.
|
Re: Pobleme mit FREE (bzw. Destroy)
Huch, gleich so viele antworten.
Zitat:
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:
|
Re: Pobleme mit FREE (bzw. Destroy)
Zitat:
Delphi-Quellcode:
var bm: TBitmap;
begin bm := GetFormImage; try //irgendwas mit dem Bitmap machen ... finally bm.Free; end; end; |
Re: Pobleme mit FREE (bzw. Destroy)
Zitat:
|
Re: Pobleme mit FREE (bzw. Destroy)
Tatsächlich. Jetzt klappts. Super. Ich weiß aber immer noch nicht warum?
Hier erstmal der neue Code
Delphi-Quellcode:
Was ist denn nun der unterschied? Ob ich das Bitmap gleich zuordne, ...
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;
Delphi-Quellcode:
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; |
Re: Pobleme mit FREE (bzw. Destroy)
Das sollte nur ein Beispiel sein. Eigentlich müsste es auch so gehen (ungetestet):
Delphi-Quellcode:
Das natürlich, bevor Du das Image selbst freigibst.
FreeAndNil(ImageVerschleiern.Picture.Bitmap);
|
Re: Pobleme mit FREE (bzw. Destroy)
Das hatte ich so gemacht. Und da ging es nicht. Komisch
Trotzdem vielen Dank an alle!!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:05 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