![]() |
Re: Rückgabewert der Funktion undefiniert
Sind die Einträge komplett identisch oder unterscheiden die sich durch Leerzeichen oder Groß-/Kleinschreibung?
|
Re: Rückgabewert der Funktion undefiniert
ie Einträge sind komplett identisch, wie aus meinen vorigen Beiträgen hervor gehen müsste: Ich sagte ja bereits, dass ich einmal Dateien per Drag'n'Drop hineinziehe und dass sie beim zweiten Reinziehen (sprich gleiche Dateien) nicht nochmal hinzugefügt werden ...
Die Dateien werden weiterverarbeitet, und da wäre es dämlich, sie mehrmals zu bearbeiten, weil sie inner Listbox mehrmals stehen ... Hier die komplette Drag'n'Drop-Routine ... Sicherlich auch von irgendwo hier geklaut ;-)
Delphi-Quellcode:
const DF_NUMBEROFFILES=$FFFFFFFF;
procedure TForm1.WMDROPFILES(var Msg: TMessage); var i,j,l,a,r,anzahl,size:Integer; Dateiname:PChar; Pfad,Pfadneu,s:string; begin inherited; Dateiname:=PChar(''); Pfad:=edit1.text; //Ermitteln des Pfades der neuen Dateien durch Einlesen der neuen Dateien //in Listbox4 anzahl:=DragQueryFile(Msg.WParam, DF_NUMBEROFFILES, Dateiname, 255); for i:=0 to (anzahl-1) do begin size:=DragQueryFile(Msg.WParam,i,nil,0)+1; Dateiname:=StrAlloc(size); DragQueryFile(Msg.WParam,i,Dateiname,size); Listbox4.Items.Add(StrPas(Dateiname)); StrDispose(Dateiname); end; DragFinish(Msg.WParam); //Herausfiltern des Pfades s:=listbox4.items[0]; l:=length(s); for j:=l downto 1 do begin if s[j]='\' then begin Pfadneu:=copy(s,1,j); Break; end; end; a:=listbox4.items.count; //Messagebox, wenn Listbox nicht leer und Pfade der neuen/alten Dateien ungleich if ((listbox1.items.count<>0) and (Pfad<>Pfadneu) and (Pfad<>'')) then if Application.MessageBox ('Sie können nur Dateien des gleichen Ordners nummerieren!'#13'Wenn Sie Dateien eines anderen Ordners in die Liste ziehen, werden die anderen Elemente entfernt.','Hinweis',MB_OKCANCEL +MB_ICONINFORMATION +MB_SETFOREGROUND)=mrok then listbox1.items.clear else a:=0; //Neue Dateien in Listbox1 for r:=1 to a do //if schonda(listbox4.items[r-1])=false then if listbox1.items.indexof(listbox4.items[r-1])=-1 then begin edit2.text:=inttostr(listbox1.items.indexof(listbox4.items[r-1])); listbox1.items.add(listbox4.items[r-1]); end; listbox4.items.clear; Dateinamenkurz(); Form1.ActiveControl:=listbox1; BitBtn1.enabled:=false; BitBtn2.enabled:=true; Button2.enabled:=true; BitBtn3.enabled:=false; BitBtn5.enabled:=true; Button6.enabled:=true; listbox2.items.clear; listbox3.items.clear; listbox1.itemindex:=0; SetLBHScrollbar(Listbox1); end; PS: Was macht inherited ... Ich verstehs immer noch nicht ... |
Re: Rückgabewert der Funktion undefiniert
Nun wurde ich aufgefordert, Quelltext zu geben und es antwortet keiner mehr ...
Keiner einen Rat? |
Re: Rückgabewert der Funktion undefiniert
Da ich nicht weiß worum es geht, da auch die Überschrift nicht zur geposteten Prozedur paßt ...
Zitat:
Also wenn z.B. mit "WMDROPFILES" eine gleichnamige Funktion in einer der Elternklasse überschrieben wurde, dann wird die alte Funktion aufgerufen. |
Re: Rückgabewert der Funktion undefiniert
Zitat:
also dein source macht bei mir genau das was er soll. es werden nur neue dateien hinzugefügt. was macht denn die funktion "Dateinamenkurz();", die hast du ja nicht mit gepostet. |
Re: Rückgabewert der Funktion undefiniert
Zitat:
___________________________________________ Für nat (und alle anderen natürlich auch):
Delphi-Quellcode:
procedure TForm1.dateinamenkurz();
var a,i,j,l:integer; Pfad,s:string; begin a:=listbox1.items.count; s:=listbox1.items[a-1]; l:=length(s); //Pfadlänge ermitteln mittels letztem Backslash for j:=l downto 1 do begin if s[j]='\' then begin Pfad:=copy(s,1,j); Break; end; end; //Pfad aus jeder Datei löschen, sodass nur noch Dateiname übrig bleibt for i:=1 to a do begin s:=listbox1.items[i-1]; if (pos(Pfad,s)<>0) then delete(s,1,j); listbox1.items[i-1]:=s; end; if (Pfad<>'') then edit1.text:=Pfad; end; |
Re: Rückgabewert der Funktion undefiniert
Zitat:
|
Re: Rückgabewert der Funktion undefiniert
Und man könnte auch ExtractFilePath und ExtractFileName verwenden, das ist nicht so umständlich :mrgreen:
|
Re: Rückgabewert der Funktion undefiniert
Delphi-Quellcode:
for i:=0 to (anzahl-1) do
begin size:=DragQueryFile(Msg.WParam,i,nil,0)+1; Dateiname:=StrAlloc(size); DragQueryFile(Msg.WParam,i,Dateiname,size); Listbox4.Items.Add(StrPas(Dateiname)); //hier fügst du mit pfad ein StrDispose(Dateiname); end;
Delphi-Quellcode:
dein problem ist, dass du die dateinamen ohne pfad speicherst,
//Neue Dateien in Listbox1
for r:=1 to a do //if schonda(listbox4.items[r-1])=false then if listbox1.items.indexof(listbox4.items[r-1])=-1 then //hier wird "datei mit pfad" mit "datei ohne pfad" verglichen begin edit2.text:=inttostr(listbox1.items.indexof(listbox4.items[r-1])); listbox1.items.add(listbox4.items[r-1]); vergleichst die (neuen) gedroppten dateien aber mit pfad mit den alten (vorher gedroppten) dateien von denen du den pfad abgeschnitten hast mit deiner procedure TForm1.dateinamenkurz(); methode. |
Re: Rückgabewert der Funktion undefiniert
Gut, Danke nat!
Jetzt funktioniert es. Ich habe die Dateinamen in Listbox4 schon gekürzt, sodass sie ganz ohne Pfad in die Listbox1 kommen. Es geht jetzt! Danke! -- Somit ist das Problem gelöst und kann daher beendet werden. -- |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 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 by Thomas Breitkreuz