如何将Listview项加载到image对象中并在Delphi的OnTimer事件中更新它

如何将Listview项加载到image对象中并在Delphi的OnTimer事件中更新它,delphi,Delphi,我是Delphi V7的noob。我正在创建幻灯片,我需要使用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 // ShowMe

我是Delphi V7的noob。我正在创建幻灯片,我需要使用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事件中键入的代码只携带一个图像。

在计时器中,您加载每个图像,用下一个图像覆盖每个图像,直到循环终止。此时图像
Count-1仍保留

您需要跟踪在每次执行计时器事件之间持续存在的某些状态。在
TForm1
中声明类型为
Integer
的名为
flateSimageIndex
的字段。然后将计时器设置为:

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;

如果您有停止和启动幻灯片放映的代码,那么您可能希望每次启动时重新初始化
flateSimageIndex

什么是“不工作”?请精确,这样我们就不必猜测了。对不起,我希望每当计时器超时时,在image1对象中逐个加载图像,提供幻灯片效果,但我在OnTimer事件中键入的代码只携带一个图像。每当计时器滴答响时,
for
循环依次加载所有图像。您需要有一个全局变量,例如表单中的一个私有字段来存储列表视图项的当前索引,并且每当计时器滴答作响时,您将加载图像并增加其值(或者如果它是最后一项,则重置为第一个值)。您可能正在寻找代码(尽管我不喜欢这个概念)。如果Delphi拥有一个带有选项ImageList和ImageIndex的TImage组件,则会更简单,因此我只需要使用:
Procedure timer1 timer[…]Image1.Picture:Image1.Picture+=1有人对组件也有任何想法吗?或者如何创建继承ImageList和ImageIndex ImageList特征的TImage组件?感谢David Heffernan和TLama,我将测试这两种解决方案并将结果发布在这里。谢谢