AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Such function in FileListBox Funktioniert nicht richtig
Thema durchsuchen
Ansicht
Themen-Optionen

Such function in FileListBox Funktioniert nicht richtig

Ein Thema von Wurstuk · begonnen am 19. Aug 2010 · letzter Beitrag vom 21. Aug 2010
Antwort Antwort
Wurstuk

Registriert seit: 19. Aug 2010
8 Beiträge
 
#1

Such function in FileListBox Funktioniert nicht richtig

  Alt 19. Aug 2010, 17:41
Hi ich versuche eine Suchfunktion für eine FileListBox zu schreiben. Nachdem ich ein bisschen im Internet rumm geguckt habe, hab ich mir das hier zusammen geschrieben:

Delphi-Quellcode:
procedure TForm4.edit_sucheChange(Sender: TObject);
var i : integer;
begin
  for i := 0 to FileListBox1.Count - 1 do
  begin
    if Pos(FileListBox1.Items[i], edit_suche.Text) > 0 then
    begin
      btn_gpOeffnen.Caption := 'Y'; // Nur zu Test Zwecken
    end
    else
    begin
      btn_gpOeffnen.Caption := 'N'; // Nur zu Test Zwecken
    end;
  end;
end;
Wenn ich jetzt die unterste Datei aus der FileListBox in der suche eingebe wechselt der button zwar auf Y aber erst nachdem dem ich den ganzen namen eingegeben habe. Ich möchte aber versuchen so eine Dynamische Suche zu schreiben. So dass Wenn ich einen Buchstaben schreibe und er in einem Dateiname drinn ist der Button(nur zu test zwecken) auf Y wechselt. Ich hoffe ihr versteht was ich meine^^

Weiß jemand was ich falsch mache und/oder wie es richtig geht?

fg

edit: Vielleicht könnte mir jemand nebenbei auch noch kurz sagen ob es geht eine datei aus einer FileListBox raus zu nehmen, aber die Datei selbst nicht zu verändern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Such function in FileListBox Funktioniert nicht richtig

  Alt 19. Aug 2010, 17:44
Deine Schleife läuft ja nach einem Treffer trotzdem weiter, deshalb klappt das auch nur mit dem letzten Eintrag.

[edit] Wie ist es so?
Delphi-Quellcode:
procedure TForm4.edit_sucheChange(Sender: TObject);
var i : integer;
    found: Boolean;
begin
  i := 0;
  found := false;
  while (i < FileListBox1.Count) and not found do
  begin
    if AnsiContainsText(FileListBox1.Items[i], edit_suche.Text) then
      found := true;
    inc(i);
  end;
  if found then
    btn_gpOeffnen.Caption := 'Y// Nur zu Test Zwecken
  else
    btn_gpOeffnen.Caption := 'N'; // Nur zu Test Zwecken
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (19. Aug 2010 um 18:00 Uhr)
  Mit Zitat antworten Zitat
Wurstuk

Registriert seit: 19. Aug 2010
8 Beiträge
 
#3

AW: Such function in FileListBox Funktioniert nicht richtig

  Alt 19. Aug 2010, 21:21
OK Danke es funktioniert, also indirekt^^ Ich musste AnsiContainsText mit pos ersetzten weil deins irgendwie nicht bekannt war.

Mit deiner Methode wird zwar jetzt wenn ich den ganzen Dateiname eingebe auf Y geschaltet, aber ich wollte versuchen das es schon auf Y geht wenn ich den ersten richtigen buchstabe eingebe. Am ende soll dabei z.B sowas raus kommen: Die Datei heißt 'abc.xyz' und ich gebe ein a ein und es werden nur noch alle datein mit einem a an erster stelle angzeigt, dann gebe ich ein b ein usw... Weiß da jemand rat? Geht es vielleicht nicht so wie ich es will weil ich Nicht AnsiContainsText benutze?

Damit geht es überigens genau so:

Delphi-Quellcode:
procedure TForm4.edit_sucheChange(Sender: TObject);
var i : integer;
begin
  for i := 0 to FileListBox1.Count - 1 do
  begin
    if Pos(FileListBox1.Items[i], edit_suche.Text) > 0 then
    begin
      btn_gpOeffnen.Caption := 'Y'; // Nur zu Test Zwecken
      exit;//<--------
    end
    else
    begin
      btn_gpOeffnen.Caption := 'N'; // Nur zu Test Zwecken
    end;
  end;
end;
Ich weiß nur nicht ob das so ganz richtig ist.

Freu mich über jede Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: Such function in FileListBox Funktioniert nicht richtig

  Alt 20. Aug 2010, 08:59
Schau Dir die Parameter von Pos() noch einmal genau an, dann wirst Du feststellen, dass Du sie genau verkehrt herum übergibst
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Wurstuk

Registriert seit: 19. Aug 2010
8 Beiträge
 
#5

AW: Such function in FileListBox Funktioniert nicht richtig

  Alt 20. Aug 2010, 12:10
So ich Hab gestern Abend noch viel rumm probiert und es sieht jetzt so aus:

Delphi-Quellcode:
procedure TForm4.edit_sucheChange(Sender: TObject);
var i : integer;
begin
  i := 0;
  while i <= FileListBox1.Count -1 do
  begin
    if length(edit_suche.Text) > 0 then //Wenn das edit feld nicht leer ist...
    begin
      if (Pos(edit_suche.Text, FileListBox1.Items[i]) = 1) then //...teste ob der such text ab der ersten stelle im dateinamen vorkommt
      begin
        i := i + 1; //wenn ja, tu nichts und wechsel auf die nächste datei
      end
      else
      begin
        FileListBox1.Selected[i] := true; // Wenn nicht Makiere die datei und lösche sie
        FileListBox1.DeleteSelected;
        i := i + 1; // Wechsel auf die nächste Datei
      end;
    end
    else
    begin
      i := fileListbox1.count; // While Schleife wird unterbrochen.
    end;
  end;
end;
Ich hab aber irgendwo einen denkfehler drinn denn eigentlich wenn ich z.B ein W eingebe und es gibt nur eine Datei mit einem W an erster stelle sollte nur noch die Datei mit dem W zusehen sein. Aber es ist ungefähr nur noch die hälfte drinn.... wenn ich dann mehr buchstaben eingebe wird zwar das gesucht ergebnis alleine angezeigt aber ab 4 Buchstaben wird nicht mehr weiter verglichen ein Bsp: Ich hab eine datei die simpsons.txt und eine die simpsons_ver2.txt heißt wenn ich jetzt simpsons eingebe werden zwar nur noch die beiden dateien angezeigt aber auch wenn ich simpsons_ver2.txt eingebe werden trotzdem beide Dateien angezeigt. Ich hab oben nochmal eingetragen wie ich denke das der code funktioniert.

Danke für den Hinweis das die Parameter vertauscht sind^^

edit: Das mit den 4 buchstaben ist jetzt weg. Habe aber immer noch das Problem das er beispielsweise bei einem w auch noch dateien anzeigt die gar kein w in ihrem namen haben...

Geändert von Wurstuk (20. Aug 2010 um 14:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

AW: Such function in FileListBox Funktioniert nicht richtig

  Alt 20. Aug 2010, 16:23
Wenn Du in einer Schleife löschst, musst Du immer von hinten löschen, da sich der Index verschiebt. Ich habe das mal ein wenig umgeschrieben:
Delphi-Quellcode:
procedure TForm4.edit_sucheChange(Sender: TObject);
var i : integer;
begin
  //Wenn das edit feld nicht leer ist..
  if length(edit_suche.Text) > 0 then
    begin
      //ständiges Neuzeichnen verhindern
      FileListBox1.Items.BeginUpdate;
      try
        //auf letztes Element positionieren
        i := FileListBox1.Count - 1;
        while i >= 0 do
          begin
            //wenn Dateiname nicht mit dem Edit.Text beginnt
            if (Pos(edit_suche.Text, FileListBox1.Items[i]) <> 1) then
              begin
                //markieren und löschen
                FileListBox1.Selected[i] := true;
                FileListBox1.DeleteSelected;
              end;
            // Wechsel auf die vorherige Datei
            i := i - 1;
          end;
      finally
        //Aktualisierte Daten wieder anzeigen
        FileListBox1.Items.EndUpdate;
      end;
    end;
end;
[edit] Obwohl: ich sehe gerade, Deine Variante müsste auch funktionieren, wenn Du nach dem DeleteSelected i nicht erhöhst. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (20. Aug 2010 um 16:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Such function in FileListBox Funktioniert nicht richtig

  Alt 20. Aug 2010, 17:20
könnte man das Löschen nicht auch so erledigen?
Delphi-Quellcode:
begin
  //markieren und löschen
  FileListBox1.Items.Delete(i);
end;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: Such function in FileListBox Funktioniert nicht richtig

  Alt 20. Aug 2010, 17:24
Wieso sollte das nicht gehen? Man kann auch erst einmal in der Schleife markieren und anschließend DeleteSelected aufrufen. Vermutlich ist aber das direkte Löschen die schnellste Variante.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Wurstuk

Registriert seit: 19. Aug 2010
8 Beiträge
 
#9

AW: Such function in FileListBox Funktioniert nicht richtig

  Alt 20. Aug 2010, 19:52
Vielen Danke!!! Ihr helft mir echt super

Du hattest recht ich habe i nicht mehr erhöht und es klappt Jetzt veränder ich noch schnell den teil mit dem löschen und dann funktioniert das ganze

Vielen Dank nochmal!
  Mit Zitat antworten Zitat
21. Aug 2010, 01:03
Dieses Thema wurde am "21. Aug 2010, 01:03 Uhr" von "Matze" aus dem Forum "Programmieren allgemein" in das Forum "GUI-Design mit VCL / Qt / Common Controls" verschoben.
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz