如何循环checkedlistbox项目并按照delphi顺序向下移动列表

时间:2017-04-28 14:53:13

标签: delphi

我正在尝试为广播电台做一个简单的播放列表。我的大部分都在工作,每隔五个轨道就会播放一个铃声,但我遇到的问题是我不知道如何在列表中依次播放每个选中的项目(jingle)。

一步一步的行动:

  1. 我会添加一个jingle或jingles列表;

    JvPlayList.Items.AddStrings(OpenDialog1.Files);
    
  2. 然后我会选择每个我想按顺序播放的叮当(屏幕截图);

    image

  3. 然后,一旦叮当声完成播放,它将移动到列表中的下一个已检查的叮当声,依此类推;

  4. 此时我没有真正的代码,因为我只想到我希望它如何工作。所以我只是想知道它是否可以做到?

1 个答案:

答案 0 :(得分:0)

是的,有可能。您只需要一个变量来跟踪正在播放的当前索引。

从索引0开始,遍历TCheckListBox.Checked[]属性,直到它返回true(或者到达列表的末尾)。如果找到,请保存索引并在TCheckListBox.Items[index]属性值中播放相应的文件。

文件播放完毕后,再次循环浏览列表,从下一个索引开始。

根据需要重复。

例如:

private
  FCurrentIndex: Integer;
  function StartNextPlayListItem: Boolean;

...

procedure TMyForm.FormCreate(Sender: TObject);
begin
  FCurrentIndex := -1;
end;

function TMyForm.StartNextPlayListItem: Boolean;
begin
  Result := False;
  for I := FCurrentIndex+1 to CheckListBox1.Items.Count-1 do
  begin
    if CheckListBox1.Checked[I] then
    begin
      FCurrentIndex := I;
      // start playing CheckListBox1.Items[I]...
      Result := True;
      Exit;
    end;
  end;
end;

procedure TMyForm.SomeStartEvent;
begin
  StartNextPlayListItem;
end;

procedure TMyForm.DonePlayingAFile;
begin
  StartNextPlayListItem;
end;