Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Inhalt der Listenbox in einer Schleife fassen??? (https://www.delphipraxis.net/15218-inhalt-der-listenbox-einer-schleife-fassen.html)

EvilDragon 24. Jan 2004 17:45

Re: Inhalt der Listenbox in einer Schleife fassen???
 
Hi leutz erst mal danke für die ganze hilfe ;)

thx an @scp, auf den trick mit array wehre ich gar net gekommen, kürtz die programmzeilen auf die hilfe... den 2. post, das mit dem Firstfind schaue ich mir mal genauer an.. mal schauen ob ich drauß schlauß werde.... hast vielleicht nen tut oder nen tipp wo ich was gutes hier finde...nutze grad die suche

thx an @Luckie, das mit dem pfad kapier ich jetzt, wird dann auch noch überarbeitet

scp 24. Jan 2004 19:25

Re: Inhalt der Listenbox in einer Schleife fassen???
 
Da ich auf die schnelle kein zusammenhängendes Beispiel finden konnte, hab ich mal eins gebastelt:
Delphi-Quellcode:
var
  SRec: TSearchRec;
  StlDirs: TStrings;
  StlFiles: TStrings;
begin
  StlDirs := TStringList.Create;
  StlFiles := TStringList.Create;
  try
   If FindFirst(ExtractFilePath(ParamStr(0)) +  'MP3\' + '*.*', faAnyFile, SRec) = 0 then
   begin
     repeat
       If ((SRec.Attr and faDirectory) <> 0) and         // Bedingung, um nur
          (SRec.Name <> '..') and (SRec.Name <> '.') then // Ordner zu finden
         StlDirs.Add(SRec.Name)
       else
       If not ((SRec.Attr and faDirectory) <> 0) then // Bedingung, um nur Dateien zu finden
         StlFiles.Add(SRec.Name);
     until FindNext(SRec) <> 0;

     FindClose(SRec);
   end;
   ListBox1.Items.AddStrings(StlDirs);
   ListBox2.Items.AddStrings(StlFiles);
  finally
    StlDirs.Free;
    StlFiles.Free;
  end;
end;

EvilDragon 25. Jan 2004 08:33

Re: Inhalt der Listenbox in einer Schleife fassen???
 
Liste der Anhänge anzeigen (Anzahl: 1)
thy das gleich kommentiert hat... dat muss erst mal wieder verdauen ;)
--------------------------------------

hm... so gans raff ich dat noch net @scp, hab mal eben meine laaange prcoedur gekürtz und vielleicht kannst du mir ja verraten wie ich genau dein beispiel einbinde...

Code:
procedure TForm1.ListBox2Click(Sender: TObject);
var track : array [1..25] of String;
    x : Integer;
begin
  if RadioButton1.Checked then begin
    if ListBox1.Selected[0] then begin
      if ListBox3.Selected[0] then begin
        for x := 1 to 25 do
        track[x] := 'mp3/cds_und_alben/' + '01' + '/' + '01' + '/' + Format('%0:2.2d', [x]) + '.mp3';
        if Listbox2.Selected[0] then begin
          MediaPlayer1.FileName := track[1];
          MediaPlayer1.Open;
          Trackbar1.Position := 0;
          Trackbar1.Max := MediaPlayer1.TrackLength[1];
          ProgressBar1.Max := MediaPlayer1.TrackLength[1];
        end;
        .
        .
        if Listbox2.Selected[24] then begin
          MediaPlayer1.FileName := track[25];
          MediaPlayer1.Open;
          Trackbar1.Max := MediaPlayer1.TrackLength[1];
          ProgressBar1.Max := MediaPlayer1.TrackLength[1];
        end;
      end;
      if ListBox3.Selected[1] then begin
        for x := 1 to 25 do
        track[x] := 'mp3/cds_und_alben/' + '01' + '/' + '02' + '/' + Format('%0:2.2d', [x]) + '.mp3';
        if Listbox2.Selected[0] then begin
          MediaPlayer1.FileName := track[1];
          MediaPlayer1.Open;
          Trackbar1.Max := MediaPlayer1.TrackLength[1];
          ProgressBar1.Max := MediaPlayer1.TrackLength[1];
        .
        .
        end;
        if Listbox2.Selected[24] then begin
          MediaPlayer1.FileName := track[25];
          MediaPlayer1.Open;
          Trackbar1.Max := MediaPlayer1.TrackLength[1];
          ProgressBar1.Max := MediaPlayer1.TrackLength[1];
        end;
      end;
      if ListBox3.Selected[2] then begin
        for x := 1 to 25 do
        track[x] := 'mp3/cds_und_alben/' + '01' + '/' + '03' + '/' + Format('%0:2.2d', [x]) + '.mp3';
        if Listbox2.Selected[0] then begin
          MediaPlayer1.FileName := track[1];
          MediaPlayer1.Open;
          Trackbar1.Max := MediaPlayer1.TrackLength[1];
          ProgressBar1.Max := MediaPlayer1.TrackLength[1];
        end;
        .
        .
        if Listbox2.Selected[24] then begin
          MediaPlayer1.FileName := track[25];
          MediaPlayer1.Open;
          Trackbar1.Max := MediaPlayer1.TrackLength[1];
          ProgressBar1.Max := MediaPlayer1.TrackLength[1];
        end;
      end;
      if ListBox3.Selected[3] then begin
        for x := 1 to 25 do
        track[x] := 'mp3/cds_und_alben/' + '01' + '/' + '04' + '/' + Format('%0:2.2d', [x]) + '.mp3';
        if Listbox2.Selected[0] then begin
          MediaPlayer1.FileName := track[1];
          MediaPlayer1.Open;
          Trackbar1.Max := MediaPlayer1.TrackLength[1];
          ProgressBar1.Max := MediaPlayer1.TrackLength[1];
        end;
        .
        .
        if Listbox2.Selected[24] then begin
          MediaPlayer1.FileName := track[25];
          MediaPlayer1.Open;
          Trackbar1.Max := MediaPlayer1.TrackLength[1];
          ProgressBar1.Max := MediaPlayer1.TrackLength[1];
        end;
      end;
      if ListBox3.Selected[4] then begin
        for x := 1 to 25 do
        track[x] := 'mp3/cds_und_alben/' + '01' + '/' + '05' + '/' + Format('%0:2.2d', [x]) + '.mp3';
        if Listbox2.Selected[0] then begin
          MediaPlayer1.FileName := track[1];
          MediaPlayer1.Open;
          Trackbar1.Max := MediaPlayer1.TrackLength[1];
          ProgressBar1.Max := MediaPlayer1.TrackLength[1];
        end;
        .
        .
        end;
        if Listbox2.Selected[24] then begin
          MediaPlayer1.FileName := track[25];
          MediaPlayer1.Open;
          Trackbar1.Max := MediaPlayer1.TrackLength[1];
          ProgressBar1.Max := MediaPlayer1.TrackLength[1];
        end;
      end;
    end;
  end;
end;
diese .. heißt das da gekürtzt wurde und das ganze geht so weit das es am ende heißt ListBox1.Selceted[10] also 10 mal 5mal und 25mal (hoffe man versteht was ich meine, jedenfalls viele viele programmzeilen)

PS: hier projektdatei nun im neuen gewand (mit array) und sorry den immer och langen code ;)

scp 25. Jan 2004 10:55

Re: Inhalt der Listenbox in einer Schleife fassen???
 
Wie gesagt du kannst die anderen beiden Zahlen auch automatisch einfügen.
Hier mal die kurze Variante, ohne FindFirst() / FindNext:

Delphi-Quellcode:
procedure TForm1.ListBox2Click(Sender: TObject);
var track : array [1..25] of String;
    x : Integer;
begin
  if RadioButton1.Checked then begin
    If (ListBox1.ItemIndex > -1) and  // Prüft, ob überhaupt etwas in den
       (ListBox3.ItemIndex > -1) then // Listboxen ausgewählt wurde
    for x := 1 to 25 do
      track[x] := 'mp3' + '/'
                + 'cds_und_alben' + '/'
                + Format('%0:2.2d',[ListBox1.ItemIndex+1]) + '/'
                + Format('%0:2.2d',[ListBox3.ItemIndex+1]) + '/'
                + Format('%0:2.2d', [x]) + '.mp3';

    if (ListBox1.ItemIndex > -1) and
       (ListBox3.ItemIndex > -1) and
       (Listbox2.ItemIndex > -1) then begin // Hier wird auch noch die Song-Listbox geprüft
          MediaPlayer1.FileName := ExtractFilePath(ParamStr(0)) + // Den Pfad der Exe nicht vergessen
                                   track[Listbox2.ItemIndex+1];
          MediaPlayer1.Open;
          Trackbar1.Position := 0;
          Trackbar1.Max := MediaPlayer1.TrackLength[1];
          ProgressBar1.Max := MediaPlayer1.TrackLength[1];

        end;
  end;
end;
Jezt vielleicht mal eine kurze Erklärung:
1. Format, sorgt dafür, wie der Name schon sagt, das z.B. eine Zahl auf eine bestimmte Art und Weise als Text umgewandelt, ausgegeben und formatiert wird. Mit dem '%0:2.2d' gibt man an, das es eine Ganzzahl (d) ist, die immer mindestens zwei Stellen (2.2) hat, die %0 steht für die Zahl, man kann in den Eckklammern auch mehrere Zahlen angeben, die dann mit %1, %2 usw. geziehlt formatiert werden können, oder alle zusammen nur mit %, mehr dazu steht ja in der Delphi-Hilfe.

2. ListboxX.ItemIndex steht für den Eintrag, den der Benutzer ausgewählt hat, wobei die Zählung bei 0 beginnt, also muss ich ein +1 anhängen, weil deine Ordner ja mit 1 anfangen.

3. Ist ListboxX.ItemIndex -1 dann hat der Benutzer gar keinen Eintrag ausgewählt und wir brauchen erst gar nicht mit der Verarbeitung anfangen.

EvilDragon 25. Jan 2004 11:50

Re: Inhalt der Listenbox in einer Schleife fassen???
 
klasse ich danke dir... habs sogar geschnallt nun hat das ganze projekt statt 8058 zeilen nur noch 369 *freu*

weiter oben ist nun das aktuelle file... vielleicht weiß jemand iwe man was noch kürtzer fassen könnte (z.b. weiter oben das auslesen der ini und einfügen in die listboxen)

vielleicht kann mir ja auch noch hier bei gehlfen werden:
hilfe timeranzeige vom medium

MikeS 25. Jan 2004 12:08

Re: Inhalt der Listenbox in einer Schleife fassen???
 
du könntest tatsächlich das auslesen vereinfachen!

ich habe es mal so gemacht:

Delphi-Quellcode:
for i := 0 to 9 do
begin
  if ListBox1.Selected[i] then
  begin
    if i < 10 then
      ListBox3.Items.LoadFromFile(dir + '/cds_und_alben/0' + inttostr(i+1) + '/inhalt.ini')
    else
      ListBox3.Items.LoadFromFile(dir + '/cds_und_alben/' + inttostr(i+1) + '/inhalt.ini');
  end;
end;
du mußt i natürlich deklarieren!
bei mir hat es funktioniert!

scp 25. Jan 2004 12:47

Re: Inhalt der Listenbox in einer Schleife fassen???
 
Funktioniert alles ähnlich:

Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
var
  inhaltini : string;
begin
  if RadioButton1.Checked then begin
    If (ListBox1.ItemIndex > -1) then
      begin
        inhaltini := dir + 
                     'mp3' + '/'
                   + 'cds_und_alben' + '/'
                   + Format('%0:2.2d',[ListBox1.ItemIndex+1]) + '/'
                   + 'inhalt.ini';
        If FileExists(inhaltini) then
          ListBox3.Items.LoadFromFile(inhaltini)
        else
          ListBox3.Items.Clear;
      end;
  end;
end;

procedure TForm1.ListBox3Click(Sender: TObject);
var
  tracksini : String;
begin
  if RadioButton1.Checked then begin
    If (ListBox1.ItemIndex > -1) and
       (ListBox3.ItemIndex > -1) then
      begin
        tracksini := dir + 
                   + 'mp3' + '/'
                   + 'cds_und_alben' + '/'
                   + Format('%0:2.2d',[ListBox1.ItemIndex+1]) + '/'
                   + Format('%0:2.2d',[ListBox3.ItemIndex+1]) + '/'
                   + 'tracks.ini';
        If FileExists(tracksini) then
          ListBox2.Items.LoadFromFile(tracksini)
        else
          ListBox2.Items.Clear;
      end;
  end;
end;
PS: Wenn du schon eine TRadioGroup auf deinem Formular hast, brauchst du nicht extra noch TRadioButtons draufzusetzten. Auch dort kannst du eine "inhalt.ini" per
Delphi-Quellcode:
RadioGroup1.Items.LoadFromFile(dir + 'mp3/' + 'inhalt.ini')
auslesen und entsprechend per RadioGroup1.ItemIndex ermitteln, welche Kategorie ausgewählt wurde.

EvilDragon 25. Jan 2004 21:39

Re: Inhalt der Listenbox in einer Schleife fassen???
 
hab alles so weit angepasst außer das mit radio.... aktuelle exe auf seite eins... muss nun noch ein paar probs mit der lautstärke und der timeranzeige hinbekommen *g*

EvilDragon 28. Jan 2004 18:18

Re: Inhalt der Listenbox in einer Schleife fassen???
 
hi hab nun folgendes prob, möchte das wenn das lied zuende ist er automatisch das nächste abspielt... sollte die liste keine weiteren einträge haben soll das erste spiel wieder abgespielt werden...

hier ist ein kleiner ansatz, das der fehlerhaft ist weiß ich, denn ich spiel da mit leider nur den aktuellen track ab.... benutze die procedure mit arry ect wie auf eine seite da vor...

Code:
  //  If ProgressBar1.Position = ProgressBar1.Max then begin
  //    MediaPLayer1.FileName := track[ListBox2.ItemIndex+1+1];
  //    MediaPlayer1.Play;
  //  end;

EvilDragon 30. Jan 2004 15:14

Re: Inhalt der Listenbox in einer Schleife fassen???
 
hab nu nhier gesucht und viele beispiele getestet leider spielt das prog statt den nächten song immer nur das was grad eben lief.. hier mal ein beispielcode:

Delphi-Quellcode:
    If ProgressBar1.Position = ProgressBar1.Max then begin
      MediaPLayer1.FileName := ListBox2.Items[ListBox2.ItemIndex+1];
      MediaPlayer1.Play;
    end;
und hier der code, der die list füllt:
Delphi-Quellcode:
  if RadioButton1.Checked then begin
    if (ListBox1.ItemIndex > -1) and  // Prüft, ob überhapt etwas in den
       (ListBox3.ItemIndex > -1) then // Listeboxen ausgewählt ist
    for x := 1 to 25 do
    track[x] := dir+'\'
              +'cds_und_alben' + '\'
              + Format('%0:2.2d',[ListBox1.ItemIndex+1]) + '\'
              + Format('%0:2.2d',[ListBox3.ItemIndex+1]) + '\'
              + Format('%0:2.2d', [x]) + '.mp3';
    if (ListBox1.ItemIndex > -1) and
       (ListBox3.ItemIndex > -1) and
       (ListBox2.ItemIndex > -1) then begin //  Hier wird auch noch die
         MediaPLayer1.FileName := track[ListBox2.ItemIndex+1]; //Song-Listbox
          if ListBox2.Items.Count=0 then exit;
          mp3File := Concat(MediaPlayer1.FileName);
          if not FileExists(mp3File) then begin
          ShowMessage('MP3 file '+#13#10+'__'+ mp3File +'__'+#13#10+'does not exist!');
          exit;
          end;
          GetID3TagInformation(mp3File, edTitle, edArtist, edAlbum, edYear, edGenre, edComment);
         Form3.Edit1.Text := MediaPlayer1.FileName;
         Edit1.Text := MediaPlayer1.FileName;
         MediaPlayer1.Open;
         SetMPVolume(MediaPlayer1, ScrollBar1.Position);                                    //geprüft
         Trackbar1.Position :=0;
         Trackbar1.Max := MediaPlayer1.TrackLength[1];
         ProgressBar1.Max := MediaPlayer1.TrackLength[1];
         MediaPlayer1.Play;
      end;
  end;
track ist ein arry (steht in der vordere seite genauer ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr.
Seite 2 von 2     12   

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