是在一个 panel上动态生成20个图片,这些图片是从imagelist里面取出来的, 然后用下面代码拖动突破,可是当拖动一张图片到另一张图片附近的时候,图片就好像跳出panel外面去了,消失不见了,有些又不会消失得,,,why??....
procedure TFmRealMonitor.PicshowDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
begin
  if state=dsDragMove then
begin
        //使Picshow组件的中心点始终位于鼠标当前的坐标点
   (Source as TPicShow).Left:=(Source as TPicShow).Left+x-((Source as TPicShow).Width div 4);
   (Source as TPicShow).Top:=(Source as TPicShow).top+y-((Source as TPicShow).Height div 4);
end;
end;为啥有时候拖动图标的时候,图片直接消失的呢 ?

解决方案 »

  1.   

    I will Come back at 0:00....,thanks..
      

  2.   

    TPicShow是什么?
    你想完成什么样的功能?在Panel上将图片拖来拖去吗,如果是处理鼠标事件就行了。图片直接消失可能跟x, y坐标有关系。
      

  3.   

    因为你在修改坐标的时候没有注意到累加效应。你可以在Source的MouseDown中记下当时的Source位置作为拖放的基值;又或者直接使用ScreenToClient功能将X,Y转化为Panel的坐标,然后直接设置Source的Left,Top为x,y就可以了。
      

  4.   

    TicShow是个第三方控件,跟image差不多的,
    额,累加效应??。晕
      

  5.   

    先暂不考虑那个除以四的项。
    对于连续的两次的鼠标事件,第一次是(1, 1)第二次是(2,2)
    假设原来的left,right是(0,0)
    那么第一次鼠标事件后,控件位置是(1,1),第二次以后,我们的期望值是(2,2),但是因为你第一次已经累加了(1,1),所以实际的数字就是(3,3)了……经历的鼠标事件越多,控件移动的就越远……
      

  6.   

     我再写个过程MouseDown,ox:=x;oy:=y,然后再
     (Source as TPicShow).Left:=(Source as TPicShow).Left+ox-((Source as TPicShow).Width div 4); 
      (Source as TPicShow).Top:=(Source as TPicShow).top+oy-((Source as TPicShow).Height div 4); 
    这样鼠标不会再累加了吧??
    额,我再看看
      兄弟,晚安,注意身体。