关于图片的移动?????????????????(50分)

  • 主题发起人 sanlanggugu
  • 开始时间
S

sanlanggugu

Unregistered / Unconfirmed
GUEST, unregistred user!
本人在表单上放置一图片,然后鼠标事件中编写程序拖动图片,可是图片晃动却十分厉害,
不知各位大虾是否有良方使图片不至于晃动的特别厉害?????
 
FormCreate事件中
DoubleBuffered := true;
 
to 影子 :采用您这种方法,不晃动了 但是图片好像移动的不利索了,
有没有更好的方法呢?
 
用D7编译一下,看看效果如何?
我在修改以前一个D6的程序时发现D7好像自动采用了双缓存,
图片滑动处理的很好,不用DoubleBuffered := true;就移动的很平稳、平滑,没有抖动现象。
 
var //定义全局变量
CanMove: Bool;
OldX, OldY: Integer;
...
//OnMousteDown ,OnMouseMove,OnMouseUp 三个事件
procedure TfrmPicBig.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
inherited;
image1.Align := alNone;
if Button = mbLeft then
CanMove := True;
OldX := X;
OldY := Y;
end;

procedure TfrmPicBig.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
inherited;
if CanMove then
begin
image1.Left := image1.Left + X - OldX;
image1.Top := image1.Top + Y - OldY;
end;
end;

procedure TfrmPicBig.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
inherited;
CanMove := False;
end;



 
嘿嘿,双缓冲就可以了。
线load到内存,再从内存拷贝到屏幕。
 
D5也是自动双缓存,就D6是手动双缓存。(D7没用过,不知)
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FX:=X;
FY:=Y;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Image1.Width > 0 then
Image1.Top:=Image1.Top+Y-FY;
IMage1.Left:=Image1.Left+X-FX;
end;
 
>>>D5也是自动双缓存
是吗?? 这个今天才知道。 一会去试试。 [:)]
 
放到一个penel上,在image上的Image1MouseDown下设置成移动panel控件的

 
我刚才也遇到这个问题,我查了一下大富翁的老文章找到了解决方案!
将IMAGE的DragKind的属性设为dkDock
DragMode的属性设为dmAutomatic
然后在IMAGE的OnEndDock的事件里写:
procedure TForm1.Image1EndDock(Sender, Target: TObject; X, Y: Integer);
var
pt :TPoint;
begin
if image1.Floating then
begin
pt := self.ScreenToClient(image1.ClientToScreen(point(0,0)));
image1.parent := self;
image1.Top := pt.y;
image1.Left := pt.x;
end;
end;

让后就可以了,这可是我刚刚成功的,给分吧!
 
50太少了,不够分!!多给点!!!
 
最好的办法:
将Image1.transParent:=False;
一切OK,比他们的方法简单使用。
 
顶部