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;