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

时间:2013-05-20 17:06:30

标签: delphi

我是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事件中输入的代码只携带一个图像。

1 个答案:

答案 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}}。