请问在Delphi中怎样才能把播放列表里的所有文件名读取到列表(ListBox)上。 (100分)

  • 主题发起人 主题发起人 网络3K
  • 开始时间 开始时间

网络3K

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在Delphi中怎样才能把播放列表里的所有文件名读取到列表(ListBox)上。
1.在我的程序目录下有一个名为Playlst.lst的文件列表,格式如下:
D:/Media Files/1.swf
....................
...................
怎样才能把所有的文件名读取到列表(ListBox)上。谢谢!

2.怎样才能连续播放列表上的文件,也就是说当第一个文件播放完后,程序自动
播放下一个文件。谢谢

回答以上的问题,最好有源码。
 
TReader TWriter
试试这两个。。
 
在Form1的private中加一个变量 sList : TStringList;
iPosition: integer;
在Form1的OnCreate事件中写入如下代码:
sList := TStringList.Create;
sList.LoadFromFile( 'Playlst.lst' );
for i := 0 to sList.Count - 1do

begin

ListBox1.Items.Add(sList.Strings);
end;


iPosition := 0;
fileName := sList.Strings[iPosition];
//取出文件名
…… //进行播放。

在Flash控件的播放结束事件中加入以下代码:
fileName := sList.Strings[iPosition];
//取出文件名
…… //进行播放。

在Form1的OnClose事件中加入以下代码:
sList.free;
 
可不可以说详细点????????/
 
不是吧,这都不够详细,看来我得把源码全贴出来了,呵呵。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, OleCtrls, ShockwaveFlashObjects_TLB;

type
TForm1 = class(TForm)
ShockwaveFlash1: TShockwaveFlash;
Panel1: TPanel;
ListBox1: TListBox;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
sList : TStringList;
//用于保存文件列表
iPosition: integer;
//用于保存当前播放文件的位置
public
{ Public declarations }
end;


var
Form1: TForm1;

implementation

uses RTLConsts;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
sFileName : String;
begin

sList := TStringList.Create;
iPosition := 0;
if FileExists('Playlst.lst') then

begin

sList.LoadFromFile('Playlst.lst');
if sList.Count = 0 then
exit;
sFileName := sList.Strings[iPosition];
ShockwaveFlash1.Movie := sFileName;
ShockwaveFlash1.Play;
end else

Application.MessageBox('对不起播放文件没有找到。','警告');
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin

sList.Free;
end;


//用于判断Flash控件是否正在播放影片,可能会有更好的办法。
procedure TForm1.Timer1Timer(Sender: TObject);
var
sFileName : String;
begin

if not ShockwaveFlash1.IsPlaying then

begin

if iPosition > sList.Count - 1 then

iPosition := 0;
if sList.Count = 0 then
exit;
sFileName := sList.Strings[iPosition];
ShockwaveFlash1.Movie := sFileName;
ShockwaveFlash1.Play;
end;

end;


end.

 
1、大家误会我的意思了,我是说把文件列表里边的所有文件名读取到ListBox上(不要读取文件路径)。
2、这些代码只能判断列表,没有判断进度条,如果只判断列表的话是不行的,有些动画还没播完,程序就播放下一个动画了。

有没有更好的办法呢???????*_*眼花
 
嗷,对啦,
1、将文件名加入列表,只要将程序做以下修改即可
for i := 0 to sList.Count - 1do

begin

ListBox1.Items.Add(ExtractFileName(sList.Strings));
end;

2、我是按你的要求,当一个文件播放完后自动播放下一个文件的。关于进度条,对Flash没有研究,不太会。
 
后退
顶部