Thema: Delphi Speicherprobleme !!!

Einzelnen Beitrag anzeigen

max666

Registriert seit: 21. Dez 2003
50 Beiträge
 
#1

Speicherprobleme !!!

  Alt 11. Sep 2004, 11:25
Hallo!

Ich wollte ein kleines Programm schreiben, mit dem ich Dateien auslesen und zu einem Menü generieren lassen wollte. Das klappt auch alles, nur leider muss ich feststellen, dass mit jedem Menüaufruf, Speicher verlosen geht.

In der Procedure zur Erzeugung des Menüs werden mit

"MI:=TMenuItem.Create(OMI);" die Menüeinträge erzeugt.
Normalerweise muss man mit "Create" erzeugte Object mit "Free" wieder freigeben (Beispiel 2), um SPeicher wieder frei zu geben. Aber dann werden alle Menüeinträge zerstört und ich erhalte kein Menü.

Weiß jemand, wie ich den belegten Speicher der Menüeinträge wieder frei bekomme.


Beispiel 1: (Ohne MI.Free)
Delphi-Quellcode:
procedure TForm1.getprogdir(OMI: TMenuItem; path: string);
var
  MI: TMenuItem;
  searchrec: TSearchRec;
begin
with ProgrammMenu do begin
BeginUpdate;
if findfirst(path + '*.*', faDirectory, searchrec) = 0 then repeat
if (searchrec.Attr and faDirectory)<>16 then begin
  MI:=TMenuItem.Create(OMI);
  MI.Caption:=andererName(searchrec.Name);
  MI.ImageIndex:=Getimageindex(path + searchrec.Name);
  MI.Tag:=-1;
  MI.Hint:=path + searchrec.Name;
  MI.OnClick := OpenFile;
  OMI.add(MI);
  end;
  until findnext(searchrec)<>0;
findclose(searchrec);
endupdate;
end;
end;

Beispiel 2: (Mit MI.Free) funktionert nicht
Delphi-Quellcode:
procedure TForm1.getprogdir2(OMI: TMenuItem; path: string);
var
  MI: TMenuItem;
  searchrec: TSearchRec;
begin
with ProgrammMenu do begin
BeginUpdate;
if findfirst(path + '*.*', faDirectory, searchrec) = 0 then repeat
if (searchrec.Attr and faDirectory)<>16 then begin
  MI:=TMenuItem.Create(OMI);
  MI.Caption:=andererName(searchrec.Name);
  MI.ImageIndex:=Getimageindex(path + searchrec.Name);
  MI.Tag:=-1;
  MI.Hint:=path + searchrec.Name;
  MI.OnClick := OpenFile;
  OMI.add(MI);
  MI.free;
  end;
  until findnext(searchrec)<>0;
findclose(searchrec);
endupdate;
end;
end;
  Mit Zitat antworten Zitat