我是Delphi V7中的菜鸟。我正在创建一个SlideShow,我需要使用Timer对象的OnTimer事件将ListView中加载的图像发送到Picture对象。请参阅我正在使用的代码:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
if open1.execute then
begin
for i := 0 to Open1.Files.Count - 1 do
// ShowMessage(Open1.Files[i]); // processa os arquivos aqui
with add.Items.Add do
begin
Caption:=ExtractFileName(Open1.Files[i]);
SubItems.Add( Open1.Files[i]);
SubItems.Add(ExtractfileExt(Open1.files[i]));
end;
上面的部分将opendialog对象的各种图像添加到ListView中。
procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.enabled:=true;
//image1.Picture.loadfromfile(add.Items.Item[0].Caption);//Assign(add.Items.Item[0].Caption);
end;
这会激活计时器。
procedure TForm1.Timer1Timer(Sender: TObject);
var i: integer;
begin
for i := 0 to add.items.count -1 do
begin
image1.Picture.loadfromfile(add.Items.Item[i].Caption );//Assign(add.Items.Item[0].Caption);
end;
end;
但我在上一段代码中需要帮助。这不起作用。
我希望只要计时器超时,就会在image1对象中逐个加载图像,从而产生幻灯片效果,但是我在OnTimer事件中输入的代码只携带一个图像。
答案 0 :(得分:0)
在您的计时器中,您加载每个图像,用下一个图像覆盖每个图像,直到循环终止。此时图像Count-1
仍然存在。
您需要跟踪每次执行计时器事件之间持续存在的状态。在名为TForm1
FLatestImageIndex
Integer
中声明procedure TForm1.Timer1Timer(Sender: TObject);
begin
FLatestImageIndex := FLatestImageIndex mod add.Items.Count;//wrap around
image1.Picture.LoadFromFile(add.Items.Item[FLatestImageIndex].Caption);
inc(FLatestImageIndex);
end;
类型的字段。然后像你这样制作你的计时器:
FLatestImageIndex
如果您有停止并开始播放幻灯片的代码,那么每次开始时您可能希望重新初始化{{1}}。