Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rückgabewert der Funktion undefiniert (https://www.delphipraxis.net/135200-rueckgabewert-der-funktion-undefiniert.html)

mkinzler 6. Jun 2009 23:18

Re: Rückgabewert der Funktion undefiniert
 
Sind die Einträge komplett identisch oder unterscheiden die sich durch Leerzeichen oder Groß-/Kleinschreibung?

trebor90 7. Jun 2009 00:10

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 ...

trebor90 11. Jun 2009 10:09

Re: Rückgabewert der Funktion undefiniert
 
Nun wurde ich aufgefordert, Quelltext zu geben und es antwortet keiner mehr ...
Keiner einen Rat?

himitsu 11. Jun 2009 10:18

Re: Rückgabewert der Funktion undefiniert
 
Da ich nicht weiß worum es geht, da auch die Überschrift nicht zur geposteten Prozedur paßt ...



Zitat:

Zitat von trebor90
PS: Was macht inherited ... Ich verstehs immer noch nicht ...

dieses ruft die gleiche Funktion in einer übergeordneten Klasse auf

Also wenn z.B. mit "WMDROPFILES" eine gleichnamige Funktion in einer der Elternklasse überschrieben wurde, dann wird die alte Funktion aufgerufen.

nat 11. Jun 2009 12:15

Re: Rückgabewert der Funktion undefiniert
 
Zitat:

Zitat von trebor90
Nun wurde ich aufgefordert, Quelltext zu geben und es antwortet keiner mehr ...
Keiner einen Rat?

sorry, hatte den thread hier total vergessen :oops:

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.

trebor90 12. Jun 2009 23:14

Re: Rückgabewert der Funktion undefiniert
 
Zitat:

Zitat von himitsu
Da ich nicht weiß worum es geht, da auch die Überschrift nicht zur geposteten Prozedur paßt ...

Dann müsstest du einfach mal den gesamten Gesprächsfaden von vorn beginnend lesen, denn da (auf Seite 1) ging es anfangs um einen undefinierten Rückgabewert ...
___________________________________________

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;

quendolineDD 13. Jun 2009 00:05

Re: Rückgabewert der Funktion undefiniert
 
Zitat:

Dann müsstest du einfach mal den gesamten Gesprächsfaden von vorn beginnend lesen, denn da (auf Seite 1) ging es anfangs um einen undefinierten Rückgabewert ...
Um die Funktion der Suche weiterhin zu gewährleisten und andere schnell an passende Ergebnisse kommen wäre es doch passend ein neues Thema zu starten, mit der neuen Frage/Thematik.

DeddyH 13. Jun 2009 00:43

Re: Rückgabewert der Funktion undefiniert
 
Und man könnte auch ExtractFilePath und ExtractFileName verwenden, das ist nicht so umständlich :mrgreen:

nat 13. Jun 2009 15:45

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:
//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]);
dein problem ist, dass du die dateinamen ohne pfad speicherst,
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.

trebor90 16. Jun 2009 13:01

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.
Seite 3 von 3     123   

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