整了几天。。
用户要求要改成,能像网页的左右滚动消失效果,但为什么我的代码只能一个运行,不能几个啊?
如何改,谢了代码1,是读取数据库的图片,但为什么我读出来后,不能扫图片依次将图片依次排列出来,而且要从左到右的播放。
(图片文件是硬盘上的位置,存成路径在数据库里)2。下面的代码2,只能让一个已存在的图片,左右滚动。
但如果要数据库的多个图片依次滚动,怎么改?
{读取数据库图片}
procedure TForm1.LoadImg;
var
 img:Timage;
 i:Integer;
 Filename:string;
begin
    with qry1 do
    begin
        Close;
        SQL.Clear;
        SQL.Add('Select * from files where type=''图片'' order by num') ;
        open;        for I := 1 to RecordCount do
        begin
            with TImage.Create(Self) do 
            begin
              Name :='Img0' + IntToStr(i);
              Parent := Self;   
              Filename:=VarToStr(FieldValues['Path'])+VarToStr(FieldValues['filename']);
              Picture.LoadFromFile(Filename);
              AutoSize:=True;
              Top := 30;
              //Left := TImage(Self.FindComponent('Img0'+IntToStr(i))).Left+TImage(Self.FindComponent('Img0'+IntToStr(i))).Width;//这句为什么不能实现图片左右依次排列出来
              Left:=50+110*i;
              Tag := I;
              next;
            end;
        end;
    end;
end;{图片滚动,只能实现一个图片的滚动,如何实现多个呢?}
procedure TForm1.tmr3Timer(Sender: TObject);
begin
  if (Image1.Left  + Image1.Width) < 0 then   
    Image1.Left :=  ClientWidth;  Image1.Left := Image1.Left - 1; }
    if (Image1.Left  + Image1.Width) < 0 then   
            Image1.Left :=  ClientWidth;    Image1.Left := Image1.Left - 1; 
  
end;

解决方案 »

  1.   

    可以变换位置,也可以变换图片,下面是变换图片的例子,自己应该看的懂var
      ArrImg:array [0..4] of TImage;
      TmpImg:TImage;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Timer1.Enabled:=false;
      Timer1.Interval:=1000;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    var
      i:integer;
    begin
      Timer1.Enabled:=False;
      for i:=low(ArrImg) to high(ArrImg) do
         ArrImg[i].Free;
      TmpImg.Free;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
    begin
      for i:=low(ArrImg) to high(ArrImg) do
      begin
        ArrImg[i]:=TImage.Create(self);
        with ArrImg[i] do
        begin
          Parent:=self;
          Picture.LoadFromFile('d:\A'+inttostr(i)+'.bmp');
          Top:=10;
          Width:=200;
          Height:=100;
          Left:=i*ArrImg[i].Width+10;
        end;
      end;
      TmpImg:=TImage.Create(self);
      Timer1.Enabled:=true;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var
      i:integer;
    begin
      TmpImg.Picture.Graphic:=ArrImg[0].Picture.Graphic;
      for i:=low(ArrImg) to high(ArrImg)-1 do
        ArrImg[i].Picture.Graphic.Assign(ArrImg[i+1].Picture.Graphic);
      ArrImg[high(ArrImg)].Picture.Graphic.Assign(TmpImg.Picture.Graphic);
    end;
      

  2.   

    用FOR循环Components[i],Components[i] is TImage来统一处理
      

  3.   

    我是楼主,这段代码,好像不能实现,图片从左到右的滚动,而且是一个个接在一起的滚动,到最后一个图片后,又从第一个开始,有办法吗?谢了procedure TForm1.Timer1Timer(Sender: TObject);
    var
      i:integer;
    begin
      TmpImg.Picture.Graphic:=ArrImg[0].Picture.Graphic;
      for i:=low(ArrImg) to high(ArrImg)-1 do
        ArrImg[i].Picture.Graphic.Assign(ArrImg[i+1].Picture.Graphic);
      ArrImg[high(ArrImg)].Picture.Graphic.Assign(TmpImg.Picture.Graphic);
    end;
      

  4.   

    哦,不是一張張跳的啊,要連續的一點點移動?那你按自己的代碼改一下就好了var
      i:integer;
    begin
      for i:=low(ArrImg) to high(ArrImg) do
      begin
        if (ArrImg[i].Left+ArrImg[i].Width)<0 then
            ArrImg[i].Left:=ClientWidth;
        ArrImg[i].Left:=ArrImg[i].Left - 1;
      end;
    end;
      

  5.   


    你真行
    你看看这个帖子吧
    http://topic.csdn.net/u/20120401/22/ec4d8f26-0da7-4134-aad0-166d2e4dea02.html?seed=1931035853&r=78127394#r_78127394