真麻烦!ListBox怎么这么多问题!又要重新开帐号了。(45分)

Q

qweasd

Unregistered / Unconfirmed
GUEST, unregistred user!
做的一个FLASH播放器程序,通过OpenDialog1打开若干FLASH文件到文件列表(Listbox1)中,
然后有很多问题!!!!!
1、点击“打开”按钮,弹出浏览窗口的对话框,如果不选择任何文件直接“取消”返回程序的话,
程序就出错。
2、如果在列表框中先选了一个文件,然后又选了另一个文件,不管第一次选的文件播放与否,只要
在列表框ListBox中点击了两个以上的文件,程序就出错。
3、跟问题2相似,哪怕没有选择两个以上的文件,就算把同一个文件点了两次,要想再播放,程序也会
出错。
综合2、3来看,好像是不能在Listbox里点击两下以上。(不管是否是同一文件)
//以下是“打开”按钮的代码:
procedure TPlayerForm.OpenBtnClick(Sender: TObject);
var
i: Integer;
str: string;
begin
if OpenDialog1.Execute then
begin
for i:=0 to OpenDialog1.Files.Count-1do
begin
str:=ExtractFileName(OpenDialog1.Files);
if Listbox1.items.indexof(str)<0 then
Listbox1.items.add(str);
end;
end;
s:=ExtractFilePath(OpenDialog1.Files[0]);
//s为全局变量,保存了所选择的文件的完整路径
end;

//以下是ListBoxClick的代码:
procedure TPlayerForm.ListBox1Click(Sender: TObject);
var
i: Integer;
begin
for i:=0 to ListBox1.Items.Count-1do
begin
if ListBox1.Selected then
begin
PlayBtn.Enabled:=true;
//PlayBtn为“开始播放”按钮
s:=s+ListBox1.Items[ListBox1.ItemIndex];
//s在此处又加上了文件名,这样路径和文件名就完整了
end;
end;
end;

以下是PlayBtn(开始播放)按钮的代码:
procedure TPlayerForm.PlayBtnClick(Sender: TObject);
begin
ShockwaveFlash1.Playing:=true;
ShockwaveFlash1.Movie:=s;
PlayBtn.Enabled:=false;
end;

这些问题好久了,请各位帮我看看,到底是什么地方错了,应该怎么改?
我希望改完后的结果是不管怎样打开、选择、播放文件,都不会出错。
分不够我重新开贴给您加上,谢谢!
 
procedure TPlayerForm.OpenBtnClick(Sender: TObject);
var
i: Integer;
str: string;
begin
if OpenDialog1.Execute then
begin
for i:=0 to OpenDialog1.Files.Count-1do
begin
str:=ExtractFileName(OpenDialog1.Files);
if Listbox1.items.indexof(str)<0 then
Listbox1.items.add(str);
end;
[red] s:=ExtractFilePath(OpenDialog1.Files[0]);
//s为全局变量,保存了所选择的文件的完整路径[/red] end;
//这样可以解决第一个问题,但你打开两次后最后的路局会把以前的路局覆盖
end;
 
在第二次点击ListBox时S中的路径被重复添加。
如开始时S:='c:/'
第一次点击S:='C;/1.swf'
第二次点击S:='C:/1.swf2.swf'
当然出错。
请在设置一个变量S1保存每次的文件名。
 
s:=s+ListBox1.Items[ListBox1.ItemIndex];

/// 换一个变量。这样最后 s 变成什么都不是了。
 
我试了一下你的代码,第一个问题问题很明显:
s:=ExtractFilePath(OpenDialog1.Files[0]);
//s为全局变量,保存了所选择的文件的完整路径
问题就出在这句上,要是取消的话,这句话,还会运行,当然就会出错了,把它放在里面就行了
if OpenDialog1.Execute then
begin

end
第二段不觉得有什么错,不过写法感觉有些奇怪,遍历一次Listbox好像完全没有必要,
 
先谢谢以上诸位,我学编程才2个月,代码主要是上网问别人,自己再来修改,所以代码是很乱,
见笑了。
第2、3个问题我自己实在无法解决,还请各位帮我改一下,给出源代码,谢谢大家!
 

磨刀不误砍柴功。
 
实在不会,还请各位大虾帮忙,谢谢!
 
请大家帮个忙沙~~~~~
这个帐号没分了,我再开别的给您加上!
 
你上面的代码比较混乱!!!
怎么能把多个文件同时给 ShockwaveFlash1.Movie
还是一个个来!!!
你声明另外一个全局变量:
var
ss:string;
然后你上面的代码改动一下就行了。
ss:=s+ListBox1.Items[ListBox1.ItemIndex];

///
procedure TPlayerForm.PlayBtnClick(Sender: TObject);
begin
if not(fileExists(ss)) then
exit;
if ShockwaveFlash1.Playing then
ShockwaveFlash1.stop
ShockwaveFlash1.Movie:=ss;
ShockwaveFlash1.Play;
PlayBtn.Enabled:=false;
end;

从你的代码看,你刚接触 delphi
 
接受答案了.
 
顶部