如何修正这个代码?---------读取数据库的图片后在窗体上左右滚动
偶要实现的功能,就是像网页上一样,左右滚动图片,现在的代码功能基本上已经实现了,
但是窗体变宽变窄时,经常是全部循环一次后数据库的图片就空一断距离
我想做到,无缝的从左到右再不断的循环..
如何改代码?请问.
数据库里只记录文件路径.
//加载图片 实现代码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;
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事件控件即可