Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listbox nach Text durchsuchen (https://www.delphipraxis.net/144631-listbox-nach-text-durchsuchen.html)

Jiro 12. Dez 2009 16:27


Listbox nach Text durchsuchen
 
Auf Wunsch eines Users, hier meine Frage in einem neuen Thema ;)

Ich möchte beim Laden in die Playliste prüfen, ob der Eintrag schon vorhanden ist.
Delphi-Quellcode:
for playlistcheck := 0 to playlist.Count -1 do
        if opendialog.Filename<>playlist.Items[vidname] then
           begin
             playlist.Items.AddStrings(opendialog.Files);
           end
        else
     showmessage('Schon vorhanden!');
Wenn in der Playliste schon ein Eintrag vorhanden ist und ich den selben nochmal hinzufügen möchte, kommt die Meldung.
Wenn aber gar kein Eintrag vorhanden ist, passiert gar nichts. Woran liegt das schon wieder?

Matze 12. Dez 2009 16:49

Re: Listbox nach Text durchsuchen
 
Hallo,

ich verstehe überhaupt nicht, was dein Code macht. Wenn der aktuell betrachtete Playlist-Eintrag nicht dem Dateiname im OpenDialog entsprichst, fügst du den Dateipfad hinzu, auch wenn dieser gegen Ende in der Playlist stehen könnte.

Ich würde das so irgendwie lösen:
Delphi-Quellcode:
function InPlayList(Playlist: TStringList; VideoName: string): Boolean;
var
  i: Integer;
begin
  Result := false;

  for i := 0 to Playlist.Count - 1 do
  begin
    if VideoName = Playlist.Items[i] then
    begin
      Result := true;
      break;
    end;
  end;
end;

// Aufruf:
if not InPlaylist(playlist, OpenDialog1.FileName) then
  playlist.Items.Add(OpenDialog1.Filename);
Oder analog eben für mehrere Dateien.

Grüße, Matze

Edit: Das genau natürlich genauso mit einer ListBox. Da kannst du dann auch Delphi-Referenz durchsuchenIndexOf nutzen, um zu prüfen, ob ein String enthalten ist.

Jiro 12. Dez 2009 17:47

Re: Listbox nach Text durchsuchen
 
Das mit dem IndexOf will bei mir nicht so ganz klappen und die ListBox hat ja kein "Items".
Wenn ich IndexOf(i) mache, kommt immer nur inkompatible Typen string und integer.
Hab jetzt bei Playlist das TStringList durch TListBox ersetzt, aber da finde ich nichts um i einzubinden.

Matze 12. Dez 2009 17:55

Re: Listbox nach Text durchsuchen
 
Willst du mich veräppeln? :gruebel:
Natürlich hat eine ListBox die Eigenschaft Items und der Code oben funktioniert 1:1, nur dass du "TStringList" durch "TListBox" ersetzen musst.

Delphi-Quellcode:
function InPlayList(Playlist: TListBox; VideoName: string): Boolean;
var
  i: Integer;
begin
  Result := false;

  for i := 0 to Playlist.Count - 1 do
  begin
    if VideoName = Playlist.Items[i] then
    begin
      Result := true;
      break;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not InPlayList(ListBox1, 'hallo') then
    ListBox1.Items.Add('hallo');
end;
Edit: versuche mal deine ganzen Codes zu verstehen und nicht blind 1:1 zu kopieren! Das bringt rein gar nichts.
Das mit IndexOf ginge so:

Delphi-Quellcode:
function InPlayList(Playlist: TListBox; VideoName: string): Boolean;
begin
  Result := PlayList.Items.IndexOf(VideoName) >= 0;
end;
Edit 2: Der Parameter kann natürlich auch vom Typ "TStrings" sein, aber das nur der Vollständigkeit halber.

Jiro 12. Dez 2009 18:07

Re: Listbox nach Text durchsuchen
 
Danke, jetzt funktioniert es..ich habs auch versucht zu verstehen aber ich wusste nicht, wo das VideoName deklariert ist.
Als ichs gesehen hab, hab ich des auch sofort geändert ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:15 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