unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls, Menus;type
TfMain = class(TForm)
Image1: TImage;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
NA: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
NB: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
NC: TMenuItem;
N7: TMenuItem;
Timer1: TTimer;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
index:integer; //标识列表框中的条目序号
order:Boolean; //播放顺序标识位
//1:顺序;0:逆序
{ Private declarations }
public
{ Public declarations }
end;var
fMain: TfMain;implementationuses Unit2,Unit3;{$R *.dfm}//退出
procedure TfMain.BitBtn2Click(Sender: TObject);
begin
Close;
end;//列表管理
procedure TfMain.BitBtn1Click(Sender: TObject);
begin
//显示界面隐藏
hide;
//列表图像界面
fList.Show;
end;//默认值设置
procedure TfMain.N7Click(Sender: TObject);
begin
//从第一个图像文件开始播放
index:=0;
//顺序播放
Order:=True;
//关闭定时器
Timer1.Enabled:=False;
//设定定时器时间间隔为1秒
Timer1.Interval:=150;
//"运行"命令屏蔽
N1.Enabled:=False;
//可以暂停
N2.Enabled:=true;
//可以加速
N3.Enabled:=true;
//可以减速
N4.Enabled:=true;
//"顺序播放"命令屏蔽
N5.Enabled:=false;
//可以逆序播放
N6.Enabled:=true;
//"恢复默认值"命令屏蔽
N7.Enabled:=false;
//打开定时器
Timer1.Enabled:=true;
end;//运行
procedure TfMain.N1Click(Sender: TObject);
begin
//"运行"命令屏蔽
N1.Enabled:=False;
//可以暂停
N2.Enabled:=true;
//可以加速
N3.Enabled:=true;
//可以减速
N4.Enabled:=true;
//若已经为顺序播放,则屏蔽顺序播放,反之亦然。
if Order then
begin
//"顺序播放"命令屏蔽
N5.Enabled:=false;
//可以逆序播放
N6.Enabled:=true;
end
else
begin
//"逆序播放"命令屏蔽
N6.Enabled:=false;
//可以顺序播放
N5.Enabled:=true;
end;
//可以恢复默认值
N7.Enabled:=true;
//打开定时器
Timer1.Enabled:=true;
end;//暂停
procedure TfMain.N2Click(Sender: TObject);
begin
Timer1.Enabled:=False;
//只允许"运行"命令
N1.Enabled:=True;
N2.Enabled:=false;
N3.Enabled:=false;
N4.Enabled:=false;
N5.Enabled:=false;
N6.Enabled:=false;
N7.Enabled:=false;
end;//加速
procedure TfMain.N3Click(Sender: TObject);
begin
if Timer1.Enabled then
begin
//暂时终止运行
Timer1.Enabled:=false;
//加速最快到50毫秒
if Timer1.Interval>50 then
begin
//每次加速以50毫秒为一个间隔单位
Timer1.Interval:=Timer1.Interval-50;
//允许再次加速
N3.Enabled:=true;
end;
if Timer1.Interval<=50 then
begin
//一旦速度小于50毫秒,则不运行加速,只允许减速
N3.Enabled:=false;
N4.Enabled:=true;
end;
//打开定时器
Timer1.Enabled:=true;
end;end;//减速
procedure TfMain.N4Click(Sender: TObject);
begin
if Timer1.Enabled then
begin
//暂时终止运行
Timer1.Enabled:=false;
//减速最慢到10秒
if Timer1.Interval<10000 then
begin
//每次减速以50毫秒为一个间隔单位
Timer1.Interval:=Timer1.Interval+50;
//允许再次减速
N4.Enabled:=true;
end;
if Timer1.Interval>=10000 then
begin
//一旦速度大于10秒,则不运行减速,只允许加速
N4.Enabled:=false;
N3.Enabled:=true;
end;
//打开定时器
Timer1.Enabled:=true;
end;
end;//顺序播放
procedure TfMain.N5Click(Sender: TObject);
begin
//设定标识位
Order:=true;
//关闭"顺序播放",开启"逆序播放"
N5.Enabled:=false;
N6.Enabled:=true;
end;//逆序播放
procedure TfMain.N6Click(Sender: TObject);
begin
//设定标识位
Order:=false;
//关闭"逆序播放",开启"顺序播放"
N6.Enabled:=false;
N5.Enabled:=true;
end;//定时器响应事件
procedure TfMain.Timer1Timer(Sender: TObject);begin
//列表中一定要有内容
if fList.ListBox1.Count>0 then
begin
if Order then
begin
//顺行
if index<fList.ListBox1.Count-1 then
index:=index+1
else
index:=0;
end
else
begin
//逆行
if index>0 then
index:=index-1
else
index:=fList.ListBox1.Count-1;
end;
//获得图片
image1.Picture.LoadFromFile(fList.ListBox1.Items[index]);
fMain.Canvas.Draw(0,0,Image1.Picture.Graphic);
if index=2 then
Form3.show end
else
begin
Timer1.Enabled:=false;
Image1.Picture:=nil;
// showmessage('该动画没有图像列表,请添加文件!');
end;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls, Menus;type
TfMain = class(TForm)
Image1: TImage;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
NA: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
NB: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
NC: TMenuItem;
N7: TMenuItem;
Timer1: TTimer;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
index:integer; //标识列表框中的条目序号
order:Boolean; //播放顺序标识位
//1:顺序;0:逆序
{ Private declarations }
public
{ Public declarations }
end;var
fMain: TfMain;implementationuses Unit2,Unit3;{$R *.dfm}//退出
procedure TfMain.BitBtn2Click(Sender: TObject);
begin
Close;
end;//列表管理
procedure TfMain.BitBtn1Click(Sender: TObject);
begin
//显示界面隐藏
hide;
//列表图像界面
fList.Show;
end;//默认值设置
procedure TfMain.N7Click(Sender: TObject);
begin
//从第一个图像文件开始播放
index:=0;
//顺序播放
Order:=True;
//关闭定时器
Timer1.Enabled:=False;
//设定定时器时间间隔为1秒
Timer1.Interval:=150;
//"运行"命令屏蔽
N1.Enabled:=False;
//可以暂停
N2.Enabled:=true;
//可以加速
N3.Enabled:=true;
//可以减速
N4.Enabled:=true;
//"顺序播放"命令屏蔽
N5.Enabled:=false;
//可以逆序播放
N6.Enabled:=true;
//"恢复默认值"命令屏蔽
N7.Enabled:=false;
//打开定时器
Timer1.Enabled:=true;
end;//运行
procedure TfMain.N1Click(Sender: TObject);
begin
//"运行"命令屏蔽
N1.Enabled:=False;
//可以暂停
N2.Enabled:=true;
//可以加速
N3.Enabled:=true;
//可以减速
N4.Enabled:=true;
//若已经为顺序播放,则屏蔽顺序播放,反之亦然。
if Order then
begin
//"顺序播放"命令屏蔽
N5.Enabled:=false;
//可以逆序播放
N6.Enabled:=true;
end
else
begin
//"逆序播放"命令屏蔽
N6.Enabled:=false;
//可以顺序播放
N5.Enabled:=true;
end;
//可以恢复默认值
N7.Enabled:=true;
//打开定时器
Timer1.Enabled:=true;
end;//暂停
procedure TfMain.N2Click(Sender: TObject);
begin
Timer1.Enabled:=False;
//只允许"运行"命令
N1.Enabled:=True;
N2.Enabled:=false;
N3.Enabled:=false;
N4.Enabled:=false;
N5.Enabled:=false;
N6.Enabled:=false;
N7.Enabled:=false;
end;//加速
procedure TfMain.N3Click(Sender: TObject);
begin
if Timer1.Enabled then
begin
//暂时终止运行
Timer1.Enabled:=false;
//加速最快到50毫秒
if Timer1.Interval>50 then
begin
//每次加速以50毫秒为一个间隔单位
Timer1.Interval:=Timer1.Interval-50;
//允许再次加速
N3.Enabled:=true;
end;
if Timer1.Interval<=50 then
begin
//一旦速度小于50毫秒,则不运行加速,只允许减速
N3.Enabled:=false;
N4.Enabled:=true;
end;
//打开定时器
Timer1.Enabled:=true;
end;end;//减速
procedure TfMain.N4Click(Sender: TObject);
begin
if Timer1.Enabled then
begin
//暂时终止运行
Timer1.Enabled:=false;
//减速最慢到10秒
if Timer1.Interval<10000 then
begin
//每次减速以50毫秒为一个间隔单位
Timer1.Interval:=Timer1.Interval+50;
//允许再次减速
N4.Enabled:=true;
end;
if Timer1.Interval>=10000 then
begin
//一旦速度大于10秒,则不运行减速,只允许加速
N4.Enabled:=false;
N3.Enabled:=true;
end;
//打开定时器
Timer1.Enabled:=true;
end;
end;//顺序播放
procedure TfMain.N5Click(Sender: TObject);
begin
//设定标识位
Order:=true;
//关闭"顺序播放",开启"逆序播放"
N5.Enabled:=false;
N6.Enabled:=true;
end;//逆序播放
procedure TfMain.N6Click(Sender: TObject);
begin
//设定标识位
Order:=false;
//关闭"逆序播放",开启"顺序播放"
N6.Enabled:=false;
N5.Enabled:=true;
end;//定时器响应事件
procedure TfMain.Timer1Timer(Sender: TObject);begin
//列表中一定要有内容
if fList.ListBox1.Count>0 then
begin
if Order then
begin
//顺行
if index<fList.ListBox1.Count-1 then
index:=index+1
else
index:=0;
end
else
begin
//逆行
if index>0 then
index:=index-1
else
index:=fList.ListBox1.Count-1;
end;
//获得图片
image1.Picture.LoadFromFile(fList.ListBox1.Items[index]);
fMain.Canvas.Draw(0,0,Image1.Picture.Graphic);
if index=2 then
Form3.show end
else
begin
Timer1.Enabled:=false;
Image1.Picture:=nil;
// showmessage('该动画没有图像列表,请添加文件!');
end;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtDlgs;type
TfList = class(TForm)
ListBox1: TListBox;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
StaticText1: TStaticText;
OpenPictureDialog1: TOpenPictureDialog;
BitBtn4: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
fList: TfList;implementationuses Unit1;{$R *.dfm}//增加
procedure TfList.BitBtn1Click(Sender: TObject);
var
s:string;
dirstr:string;
keyword:string;
rc:TSearchRec;
found:integer;
{
var
//获得图像文件名
FName:string;
//标志位,标志当前选取的图像文件是否重复选择
IsValid:Boolean;
i:integer;
}
begin
dirstr:='C:\图像动画系统\'; //任意目录
keyword:='*.jpg'; //关键字
s:=dirstr+Trim(keyword);
found:=findfirst(s,faAnyFile,rc);
while found=0 do
begin
listbox1.Items.Add(ExtractFileName(rc.Name)); //do samething...
found:=FindNext(rc);
end;
end;
//删除选定的文件名
procedure TfList.BitBtn2Click(Sender: TObject);
var i:integer;
begin
listbox1.Items.add('001宾馆正门.jpg');
listbox1.Items.add('002白云楼正门.jpg');
listbox1.Items.add('003.JPG');
listbox1.Items.add('004.JPG');
listbox1.Items.add('005净慧楼.JPG');
listbox1.Items.add('006六榕楼.JPG');
listbox1.Items.add('007.JPG');
listbox1.Items.add('008.JPG');
listbox1.Items.add('009.jpg');
listbox1.Items.add('010.jpg');
listbox1.Items.add('011碧海楼正门.jpg');
listbox1.Items.add('012碧海楼外夜景.jpg');
listbox1.Items.add('014碧海餐厅美华厅.JPG');
listbox1.Items.add('015碧海餐厅越华厅.jpg');
listbox1.Items.add('016碧海楼秀华厅.jpg');
end;//确定
procedure TfList.BitBtn3Click(Sender: TObject);
begin
//列表界面隐藏
hide;
//显示图像界面
fMain.Show;
end;//取消
procedure TfList.BitBtn4Click(Sender: TObject);
begin
ListBox1.Clear;
application.Terminate;
end;end.
// fMain.Canvas.Draw(0,0,Image1.Picture.Graphic);
依然是播放到第十四张出错...........
真的不会找出原因了。昨天搞了一天累了各位大神能帮我看下是什么原因未。
改好后发到我[email protected]
急啊。4号就要拿出去晚会展示
上面是我做的程序。累了搞不出原因。。
谁能帮帮我啊。。
http://www.jb51.net/softjc/55595.html
软件测试要旨之一:程序任何部分都可能出错。也许这句话对你有用。其实,你要是跟踪到 LoadFromFile 这里出错,就可以立即断定:不是你的图片有问题,就是 Delphi 有问题。
http://download.csdn.net/detail/longai123/5053447
图片已上传了。。哪位大神帮下我。。花了半个小时上传。。
1将照片放在C:\图像动画系统目录下....这个我写死左
一定要将照片和照片2放在C:\图像动画系统目录下
因为是播放到第十三或第十张出错。。
小女子在此谢过了....
难道LZ色诱?? :)用楼主的可执行文件, lz的7张照片, 运行N久, 没出错...
LZ你把程序放到别人电脑上试试, 出错不.
LZ注意看我15,16楼的回复, 我用自己的图片(5M以上)60多张图片轮换没有报异常20楼也做了测试建议...
CSDN 也兴男扮女装呀?以后俺得小心了,喊错了性别对不住人家。
直接用你的可执行程序, 出错用D7/D XE打开你的项目不做修改编译, 执行不出错 :)你使用的图片大小差异较大, 切换不流畅
我试着做了个数据缓冲, 效果好很多, 显示比较平滑.如果楼主只能用d6的话, 做以下优化试试, 那条能解决问题采纳那条:
1 将多个图片文件的大小控制在较小范围(你提供的图片大的14m, 小的700k, 这样展示是效果不好);2 在加载图片时, 做个锁定和延时
----------------------------------------
//定时器响应事件
procedure TfMain.Timer1Timer(Sender: TObject);
begin
//列表中一定要有内容
if fList.ListBox1.Count>0 then
begin
if Order then
begin
//顺行
if index<fList.ListBox1.Count-1 then
index:=index+1
else
index:=0;
end
else
begin
//逆行
if index>0 then
index:=index-1
else
index:=fList.ListBox1.Count-1;
end; //获得图片
try
image1.Picture.LoadFromFile(fList.ListBox1.Items[index]);
fMain.Canvas.Lock;
fMain.Canvas.Draw(0,0,Image1.Picture.Graphic);
fMain.Canvas.Unlock;
Sleep(100);
except on E: Exception do
ShowMessage(e.Message);
end;
end
else
begin
Timer1.Enabled:=false;
Image1.Picture:=nil;
showmessage('该动画没有图像列表,请添加文件!');
end;
end;3 如果图片大小和数量你无法控制, 最好做个数据缓冲以保证切换的流畅性
======================================
PS : 所提建议本人都做了相关测试, 但不能保证一定可以解决LZ遇到的问题
公司年会已过。。用flash播放。。
哪位大神能帮我分析下原因。。小女子以身相许..............
早听人说,码农堆里的女孩儿日子过得像公主,今日领教了。
既然已不急用,何不自己好好研究下?那能学到更多。
我用 Fireworks 把 014 和 016 另存了下,再播放就没问题了。你自己试试吧。
把压缩率增大些,图片能小很多,画面看上去并无多大差别。顺便问下:挺好的宾馆,为何那个静慧楼弄得如此破败?
CMYK图片如果宽度超过SCREEN的宽度较多时,就会出错。
另 题外话,图片展显,直接用ACDSee 就可了。为何要写软件做呢??除非是作业没有办法!!