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 1 von 2  1 2      
DoktorD

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

Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 10:55
Hi. Habe ein kleines Tool in dem ich ein Panel dynamisch erzeuge. In diesem Panel erzeuge ich ein Image.

Zur Laufzeit hole ich mir mit "self.GetFormImage" dann das aktuelle Bild der Form.

Funktion:
Ich will, wenn ich ein Fenster aufmache den Hintergrund verschleiern.

Das Funktioniert soweit ganz gut, aber nach dem ca. 47 maligen aufrufen des Fensters kommt die Fehlermeldung:

Exception-Klasse EOutOfResources mit Meldung 'Für diesen Befehl ist nicht genügend Speicher verfügbar.

Ich hab keine Ahnung wie ich den Fehler lokalisieren soll, bzw. ich weiß garnicht warum hier ein Fehler auftritt.


Delphi-Quellcode:
procedure TFrmMain.Button1Click(Sender: TObject);
var
  ModalesFenster: TForm2;
begin
  Verschleiern(TRUE);
  ModalesFenster := TForm2.Create(Self);
  ModalesFenster.ShowModal;
  Verschleiern(FALSE);
end;




procedure TFrmMain.Verschleiern(Status: Boolean);
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;
    ImageVerschleiern.Picture.Bitmap := self.GetFormImage;

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

    PanelVerschleiern.Show;
  end
  else
  begin
    PanelVerschleiern.Hide;
    ImageVerschleiern.Free;
    PanelVerschleiern.Free;
  end;
end;




procedure TFrmMain.AlphaBlendRect (const aCanvas: TCanvas;
                                 const aRect: TRect;
                                 const aColor: TColor;
                                 const aIntensity: Byte);
var
  w, h : Integer;
  Bitmap : TBitmap;
  BlendParams : TBlendFunction;
begin
  w := Succ(aRect.Right - aRect.Left);
  h := Succ(aRect.Bottom - aRect.Top);
  Bitmap := TBitmap.Create;
  try
    Bitmap.Width := w;
    Bitmap.Height := h;
    Bitmap.Canvas.Brush.Color := ColorToRGB(aColor);
    Bitmap.Canvas.FillRect (Rect(0, 0, w, h));
    BlendParams.BlendOp := AC_SRC_OVER;
    BlendParams.BlendFlags := 0;
    BlendParams.SourceConstantAlpha := aIntensity;
    BlendParams.AlphaFormat := 0;
    Windows.AlphaBlend(aCanvas.Handle, aRect.Left, aRect.Top, w, h,
                       Bitmap.Canvas.Handle, 0, 0, w, h,
                       BlendParams);
  finally
    Bitmap.Free;
  end;
end;


Im Anhang ist das Projekt
Angehängte Dateien
Dateityp: rar hintergrund_verschleiern__version_2__100.rar (514,6 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 11:04
Versuch mal
FreeAndNil( ImageVerschleiern); satt de, .Free
Auerdem erzeugst du ja in denem Button immer ein neues Fenster, welches du nicht mehr freigibst.
Markus Kinzler
  Mit Zitat antworten Zitat
DoktorD

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

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 11:11
Hab ich auch schon probiert. Das geht auch nicht. Ich bin jetzt soweit, dass ich meine, dass es nicht an den dynamisch erzeugten Objekten liegt (Panel, Image), sondern irgendwie an "self.GetFormImage"

Aber wo belegt das denn speicher? Oder wie könnte ich den freigeben?
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#4

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 11:20
Ich denke dass es, wie mkinzler schon geschrieben hat, daran liegt, dass du das "ModaleFenster" wahrscheinlich nicht wieder freigibst...
Jonas
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 11:23
Binde doch mal FastMM ein und schau was der über deinen Code so zu berichten hat.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
DoktorD

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

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 11:24
Danke für den Tipp.

Aber was ist denn FastMM? Wo bekomme ich das her und wie binde ich das ein?
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#7

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 11:25
http://sourceforge.net/projects/fastmm/

Das überwacht dein Delphiprogramm und sagt dir ob irgendwo Speicherlecks auftreten, weil du z.b. ein dyn. erzeutes Formular nicht wieder freigibst und dieses somit immer noch Arbeitspeicher belegt.
Jonas
  Mit Zitat antworten Zitat
DoktorD

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

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 11:42
Wie genau wird das denn eingebunden oder gestartet? Hab jetzt die deutsche Unit FastMM4 und FastMM4Messages dem Projekt hinzugefügt.
Aber irgedwas muss ich doch noch machen, oder?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 12:05
Am besten noch kontrollieren, dass FastMM4 als aller erste Unit in der DPR in der Uses Liste steht. Dann Programm aufrufen, arbeiten und beenden. Dann erhälst du eine entsprechende Liste.
  Mit Zitat antworten Zitat
DoktorD

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

Re: Pobleme mit FREE (bzw. Destroy)

  Alt 3. Mär 2008, 12:46
So, habs nun hinbekommen. Nur verstehe ich die Meldung nicht. Was bedeutet das denn?

Bild ist im Anhang
Miniaturansicht angehängter Grafiken
fehlermeldung_125.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:19 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