![]() |
drag and drop filter funktioniert nicht
hallo ich habe in die drag and drogp procedure etwas hinzugefügt, dass nur mp3 files zusallen soll,
leider funktioniert dies nicht /:
Delphi-Quellcode:
procedure TForm2.WMDROPFILES (var Msg: TMessage);
var i, j, anzahl, size: integer; Dateiname: PChar; begin inherited; anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255); for i := 0 to (anzahl - 1) do begin size := DragQueryFile(Msg.WParam, i , nil, 0) + 1; Dateiname:= StrAlloc(size); if not(copy(Dateiname,0,length(Dateiname)-4) = '.mp3') then begin showmessage('nur mp3 files'); exit; end else begin DragQueryFile(Msg.WParam,i , Dateiname, size); ListA.items.add(StrPas(Dateiname)); StrDispose(Dateiname); DragFinish(Msg.WParam); ListB.Clear; for j := 0 to listA.Items.Count - 1 do ListB.Items.Add(inttostr(j+1)+'. '+extractfilename(lista.Items[j])); end; end; end; |
Re: drag and drop filter funktioniert nicht
die Parameter der Funktion copy stimmen nicht. Schau dir am besten mal in der Hilfe an welche Parameter erwartet werden. Zudem solltest du bedenken das es nicht nur die Endung ".mp3" sondern auch ".Mp3", ".MP3" etc. gibt.
|
Re: drag and drop filter funktioniert nicht
danke für den tipp mit der schreibweise von mp3^^ hätte ich übersehen,
aber leider habe ich in der delphi hilfe nichts gefunden zu copy aber habe in andreren threads geschaut und konnte jetzt meinen fehler nicht finden, was soll denn daran falsch sein? lg |
Re: drag and drop filter funktioniert nicht
Schau Dir mal ExtractFileExt an damit sollte es einfacher gehn.
|
Re: drag and drop filter funktioniert nicht
ich habe mit jetzt ExtractFileExt angeschaut
Delphi-Quellcode:
leider funktioniert es wieder nicht,
procedure TForm2.WMDROPFILES (var Msg: TMessage);
var i, j, anzahl, size: integer; Dateiname: PChar; begin inherited; anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255); for i := 0 to (anzahl - 1) do begin size := DragQueryFile(Msg.WParam, i , nil, 0) + 1; Dateiname:= StrAlloc(size); if ExtractFileExt(StrPas(Dateiname)) = '.mp3' then begin DragQueryFile(Msg.WParam,i , Dateiname, size); ListA.items.add(StrPas(Dateiname)); StrDispose(Dateiname); DragFinish(Msg.WParam); ListB.Clear; for j := 0 to listA.Items.Count - 1 do ListB.Items.Add(inttostr(j+1)+'. '+extractfilename(lista.Items[j])); end else begin showmessage('nur mp3 files'); exit; end; end; end; mache wohl etwas falsch :-( |
Re: drag and drop filter funktioniert nicht
Moin Marcasso,
Zitat:
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:
[/EDIT2]
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; |
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Multimedia" nach "Object-Pascal / Delphi-Language" verschoben.
Das eigentliche Problem ist eines mit der Sprache, als solcher |
Re: drag and drop filter funktioniert nicht
^wenn ich jetz egal welche files ziehe wird nichts der liste hinzugefügt /:
Delphi-Quellcode:
procedure TForm2.WMDROPFILES (var Msg: TMessage);
var i, j, anzahl, size: integer; Dateiname: PChar; begin anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255); 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; end; |
Re: drag and drop filter funktioniert nicht
Hallo,
Du verwendest ja auch DragQueryFile falsch. Ich habe mal den korrekten Quellcode kommentiert:
Delphi-Quellcode:
Gruß
procedure TForm2.WMDROPFILES (var Msg: TMessage);
var i, anzahl, size: integer; Dateiname: PChar; begin ListA.Clear; // Anzahl der Dateien ermitteln anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 255); // Alle Dateien durchlaufen for i := 0 to Anzahl - 1 do begin // Länge des aktuellen Dateinamens ermitteln Size := DragQueryFile(Msg.WParam, i, nil, 0) + 1; // Speicher allokieren Dateiname := StrAlloc(Size); try // Aktuellen Dateinamen ermitteln DragQueryFileMsg.WParam, i, Dateiname, Size); // Wenn MP3 -> in Liste einfügen if LowerCase(ExtractFileExt(Dateiname)) = '.mp3' then ListA.items.add(Dateiname); finally // Speicher wieder freigeben StrDispose(FileName); end; end; // Dateien in andere Liste übertragen ListB.Clear; for i := 0 to listA.Items.Count - 1 do ListB.Items.Add(inttostr(i + 1)+'. ' + extractfilename(listA.Items[i])); end; xaromz |
Re: drag and drop filter funktioniert nicht
hey vielen vielen dank (:
den rest werde ich wohl mahcen können, danke :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 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