首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么修正这个代码?读取数据库的图片后在窗体上左右滚动

2012-04-28 
如何修正这个代码?---------读取数据库的图片后在窗体上左右滚动偶要实现的功能,就是像网页上一样,左右滚

如何修正这个代码?---------读取数据库的图片后在窗体上左右滚动
偶要实现的功能,就是像网页上一样,左右滚动图片,现在的代码功能基本上已经实现了,
但是窗体变宽变窄时,经常是全部循环一次后数据库的图片就空一断距离

我想做到,无缝的从左到右再不断的循环..
如何改代码?请问.

数据库里只记录文件路径.

Delphi(Pascal) code
//加载图片 实现代码procedure TMainForm.LoadImg;var i:Integer;begin    if P3.Visible=False then exit;        with DataM.Q2 do    begin        Close;        SQL.Clear;        SQL.Add('Select * from files where type=''图片'' order by num') ;        open;        SetLength(ArrImg,RecordCount);        for I := 0 to RecordCount-1 do        begin          ArrImg[i]:=TImage.Create(P3);          with ArrImg[i] do          begin            Parent:=P3;            Picture.LoadFromFile( VarToStr(FieldValues['Path'])+VarToStr(FieldValues['filename']) );            AutoSize:=true;            Top:=0;            Left:=i*ArrImg[i].Width;                        Tag:=i;                            end;          next;        end;        Timer1.Enabled:=true;    end;end;//加了一个Timer每0.1秒移动一次procedure TMainForm.Timer1Timer(Sender: TObject);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;


[解决办法]
Delphi(Pascal) code
unit Unit1;interfaceuses  Forms, SysUtils, Classes, Controls, ExtCtrls;type  TForm1 = class(TForm)    Panel1: TPanel;    Timer1: TTimer;    procedure FormCreate(Sender: TObject);    procedure FormDestroy(Sender: TObject);    procedure Timer1Timer(Sender: TObject);  private    FImages: TList;    { Private declarations }  public    procedure LoadImages(AParent: TWinControl);    procedure FreeImages;    procedure MoveImages;    { Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.LoadImages(AParent: TWinControl);var  I, FPosX: Integer;  FImage  : TImage;begin  FPosX := 0;  for I := 0 to 9 do  begin    FImage := TImage.Create(AParent);    FImage.Parent := AParent;    FImage.Picture.LoadFromFile(Format('example%d.bmp', [I])); //依次加载example1.bmp~example9.bmp    FImage.Left := FPosX;    FImage.Top  := (AParent.ClientHeight - FImage.Height) div 2;    FPosX := FPosX + FImage.Width;    FImages.Add(FImage);  end;  Timer1.Enabled := True;end;procedure TForm1.FreeImages;var  FImage: TImage;begin  while FImages.Count > 0 do  begin    FImage := TImage(FImages.Items[0]);    FreeAndNil(FImage);    FImages.Delete(0);  end;end;procedure TForm1.MoveImages;var  I     : Integer;  FRight: TImage;  FImage: TImage;begin  for I := 0 to FImages.Count - 1 do  begin    FImage := TImage(FImages.Items[I]);    FImage.Left := FImage.Left - 1;  end;  while True do  begin    FImage := TImage(FImages.Items[0]);    FRight := TImage(FImages.Items[FImages.Count - 1]);    if (FImage.Left + FImage.Width) < 0 then    begin      FImages.Delete(0);      FImages.Add(FImage);      FImage.Left := FRight.Left + FRight.Width;    end    else      Break;  end;end;procedure TForm1.FormCreate(Sender: TObject);begin  FImages := TList.Create;  LoadImages(Panel1);  Panel1.DoubleBuffered := True;end;procedure TForm1.FormDestroy(Sender: TObject);begin  FreeImages;  FreeAndNil(FImages);end;procedure TForm1.Timer1Timer(Sender: TObject);begin  MoveImages;end;end.
[解决办法]
写个TIME事件控件即可

热点排行