本帖最后由 luyuhai 于 2011-02-16 15:03:31 编辑

解决方案 »

  1.   

    你移动treeview怎么鼠标会移到外面呢,应该一直在treeview上
    可以捕获application的鼠标消息,判断当前活动组件是不是treeview
      

  2.   

    treeview是在一个ScrollBox中,移动treeview时,鼠标如果离开ScrollBox区域,就无法触发MouseUp事件了。
      

  3.   

    我做一个测试窗体上放置了 panel treeview在panel上按下左键,然后移动鼠标离开panel区域,松开按键,能触发mouseup而treeview就无法触发mouseup事件
      

  4.   

    解决了 ,在mousedown中 设置MouseCapture = true,就能收到mouseup事件了,
    type 
         TMoveCracker = class(TControl); 
         
        procedure TfrmMain.ControlMouseDown(Sender: TObject; Button: TMouseButton; 
         Shift: TShiftState; X, Y: Integer); 
        begin 
         downX := X; 
         downY := Y; 
         dragging := TRue; 
         TMoveCracker(Sender).MouseCapture := True; ////////////////
        end; 
         
        procedure TfrmMain.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, 
         Y: Integer); 
        begin 
         if dragging then 
         with Sender as TControl do 
         begin 
         Left := X - downX + Left; 
         Top := Y - downY + Top; 
         end; 
        end; 
         
        procedure TfrmMain.ControlMouseUp(Sender: TObject; Button: TMouseButton; 
         Shift: TShiftState; X, Y: Integer); 
        begin 
         if dragging then 
         begin 
         dragging := False; 
         TMoveCracker(Sender).MouseCapture := False; /////////////////////
         end;