做了一个小图片程序,图片可以拖动
但是拖动的时候图片会有抖动,请问是什么原因,如何解决?
注:是图片抖动,不是图片闪烁,所以请不要回答设置DoubleBuffered为true;
    是否有可能是图片移动的代码所造成?图片移动代码如下:
procedure Tform1.ImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: Integer);
begin
flag:=true;
ox:=x;
oy:=y;
end;procedure TForm1.ImageMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin 
if flag then
begin
image1.Left:=image1.Left+(x-ox);
image1.Top:=image1.Top+(y-oy);
end;
end;procedure Tform1.ImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: Integer);
begin
flag:=false;
end;

解决方案 »

  1.   

    这不是水平的问题,是需求的问题。
    首先这个问题可以采取去抖的办法消除掉抖动的:
    比如
    procedure TForm1.ImageMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer); 
    begin
       
      if flag then 
      begin
      if (abs(x-ox)<2) and (abs(y-oy)<2) then //如果移动小于2个像素,不动
         exit
      else
      begin 
        image1.Left:=image1.Left+(x-ox); 
        image1.Top:=image1.Top+(y-oy);
      end; 
      end; 
    end; 这就回带来问题,如果用户就想移动1个象素怎么办?当然你可以加时间进行判断,如果用户就想快,又如何?
    所以,这个问题与需求是有关系的。
      

  2.   

    如果在TIMER里面改变IMAGE父窗体的刷新速度,会不会有所改善呢?