Moin Marcasso,
Zitat von
Marcasso:
danke für den tipp mit der schreibweise von mp3^^ hätte ich übersehen,
wieso hätte?
Die hast Du schon wieder nicht berücksichtigt
Wenn ich das richtig sehe, fabrizierst Du auch noch, je Dateiname der nicht als gültig anerkannt wird, auch noch ein Speicherloch, da Du StrDispose nur bei gültiger Datei aufrufst.
[EDIT]
Warum brichst Du eigentlich die Verarbeitung ab, wenn die Endung mal nicht .mp3 ist?
Lass' die Datei doch einfach aus, dann muss der Anwender sich nicht darum kümmern gezielt entsprechende Dateien zu markieren, was bei Standardinstallation von Windows (ausblenden von registrierten Dateiendungen) unter Umständen gar nicht so einfach ist.
[/EDIT]
[EDIT2]
Das DragFinish gehört auch nicht in die Schleife, denn sonst gibst Du bei der ersten gültigen Datei den vom System reservierten Speicher wieder frei.
So würde ich es machen (auch ohne die, inzwischen unüblichen StrAlloc, StrPas, StrDispose):
Delphi-Quellcode:
anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255);
try
Dateiname := AllocMem(Size);
try
if LowerCase(ExtractFileExt(Dateiname)) = '.mp3' then begin
DragQueryFile(Msg.WParam,i , Dateiname, size);
ListA.items.add(Dateiname);
ListB.Clear;
for j := 0 to listA.Items.Count - 1 do
ListB.Items.Add(inttostr(j+1)+'. '+extractfilename(lista.Items[j]));
end;
finally
FreeMem(Dateiname,Size);
end;
finally
DragFinish(Msg.WParam);
end;
[/EDIT2]