Delphi 多点触控滑动图片的问题

yct0605 2014-12-16 11:47:40
D2010 多点触控滑动图片,目前可以实现左右滑动,每次滑动的时候不是单张图片进行滑动,中间会出现两张图片混合显示的问题,现在需要有滑动的效果,并且像手机相册一样,每次滑动一张图片,大虾们帮忙改改代码,谢了!


procedure TFrmwxgjxgl.FormCreate(Sender: TObject);
begin
FImages := TList<TImage>.Create;
FimagesTop:=TList<TImage>.Create;

//TDirectory.GetFiles(AppPath+PicPath+PicHappy+PicHappySbgl+PicHappySbglWxgjxgl+PicHappySbglWxgjxglWxgjxql,FileJpgAll)
LoadPicFile('C:\Users\YCY\Pictures', '*.jpg');
LoadPicFileTop('C:\Users\YCY\Pictures', '*.jpg');

if Length(TDirectory.GetFiles('C:\Users\YCY\Pictures', '*.jpg'))<2 then
begin
LoadPicFile('C:\Users\YCY\Pictures', '*.jpg');
LoadPicFileTop('C:\Users\YCY\Pictures', '*.jpg');
end;
end;
procedure TFrmwxgjxgl.LoadPicFile(FilePath,FileFlag:string);
var
FileName: String;
Wic: TWicImage;
Image: TImage;
begin
try
try
Wic := TWICImage.Create;

for FileName in TDirectory.GetFiles(FilePath,FileFlag) do
begin
try
Wic.LoadFromFile(FileName);
Image := TImage.Create(Self);
Image.Parent := Panel1;
Image.Top:=0;
Image.Left:=0;
Image.Height:=321;
Image.Width:=387;

Image.Stretch := True;
Image.Center := True;
image.Transparent:=True;

Image.Picture.Assign(Wic);
Image.Left := Panel1.ClientWidth * FImages.Count;
FImages.Add(Image);
except
//Ignore errors loading the image.
end;
end;
finally
Wic.Free;
end;
except
on e:Exception do
begin
//SetDlgAutoClose(CloseErrDlg,True);
Application.MessageBox(PChar(e.Message),PChar('错误'),MB_OK+MB_ICONERROR);
end;
end;
end;

procedure TFrmwxgjxgl.OnPan(Sender: TObject; Delta: TPoint);
var
I: Integer;
Image,Image2: TImage;
begin
//Pan
for I := 0 to FImages.Count - 1 do
begin
Image := FImages[I];
Image.Left := Image.Left - Delta.X;
end;

//Rotate images
Image := FImages[0];
if Image.Left + Image.Width < 0 then
begin
FImages.Add(Image);
FImages.Delete(0);

Image:=FImages[FImages.Count-1];
Image2:=FImages[FImages.Count-2];
Image.Left := Image2.Left+ Image.Width;
end
else
if Image.Left > 0 then
begin
FImages.Insert(0, FImages[FImages.Count - 1]);
FImages.Delete(FImages.Count - 1);
Image := FImages[0];
Image2 := FImages[1];
Image.Left := Image2.Left - Image.Width;
end;
end;
procedure TFrmwxgjxgl.Panel1Gesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
if EventInfo.GestureID = igiPan then
begin
if not (gfBegin in EventInfo.Flags) then
OnPan(Sender, Point(FLast.X - EventInfo.Location.X,Flast.Y - EventInfo.Location.Y));
FLast := EventInfo.Location;
end;
end;
...全文
1119 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yct0605 2015-03-26
  • 打赏
  • 举报
回复
引用 6 楼 doorsky123 的回复:
为什么中间会出现两张图片混合显示呢 你触摸放手后没有做处理, 要调节下最终image的位置
可以考虑一下,我还要抽时间试试看
xiaowei_001 2015-03-25
  • 打赏
  • 举报
回复
是否可以考虑建立数据结构,将图片管理起来,滑动当前图片时把所有别的图片隐藏或只显示左右两张图片
SVIP_ 2015-03-25
  • 打赏
  • 举报
回复
为什么中间会出现两张图片混合显示呢 你触摸放手后没有做处理, 要调节下最终image的位置
yct0605 2015-03-25
  • 打赏
  • 举报
回复
引用 4 楼 xiaowei_001 的回复:
是否可以考虑建立数据结构,将图片管理起来,滑动当前图片时把所有别的图片隐藏或只显示左右两张图片
这个方法好像不行吧,手机相册滑动的时候不管滑动距离多大,都会显示下一张图片。
yct0605 2014-12-16
  • 打赏
  • 举报
回复
先占个沙发

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧