摸索了很多天,真的很奇怪,需要把事情详细说一下。 窗体功能主要是按收文件拖放,然后把文件图标保存在ListView里,下次可以直接双击图标打开文件,类似快捷方式管理。自从加了个窗体自动隐藏功能 用WMMouseEnter判断,隐藏时窗体左边露出2个pix,鼠标移上去之后,WMMouseEnter接收到鼠标消息后,窗体Left=screen.left-窗体.Width 而完全显示出来。
      
     现在奇怪的问题是,窗体隐藏时,直接用鼠标移到窗体边缘上,窗体可以全显示,如果用鼠标拖个文件移到窗体边缘上则窗体没有任何反应,经判断是WMMouseEnter根本接收不到鼠标事件, 更奇怪的是,如果这时候我人工激活一个提示窗口(而且提示窗口里的定时器timer要enabled),则 用鼠标拖个文件移到窗体边缘上,窗体就能正常全显示, 如果提示窗口里的定时器timer是Disabled的话,主窗体也没反应。
         研究了几天,也没找到头绪,希望各位大大能指点一二,谢谢了
    

解决方案 »

  1.   

    是不是应该触发2次wmmouseenter?
      

  2.   

         刚才又逐个排除法试了下,情况是这样, 在主窗体上 加个 timer 一样可以达到效果,但是  timer 一定要有过程事件,就算过程里代码是空的也行,但一定要有procedure TForm1.Timer4Timer(Sender: TObject); 这个过程,
        
        实在不明白了,用鼠标拖个文件移进Form,就不能激发WMMouseEnter事件,在窗体里加个Timer,在Timer过程里既便没有一句代码,却又能激发WMMouseEnter事件,为什么?  难道一定要加Timer才能解决这个问题?
      

  3.   

    timer的周期设的很长,肯定不会在拖放期间触发定时事件,会怎么样?
      

  4.   

    那是不是拖放在大form的边缘也是没有反应的?
      

  5.   

    Hook一下MOUSE, 触发WM_MOUSEMOVE消息,计算区域,然后发消息回到主窗. 主窗接到消息即Active
      

  6.   


    大哥,怎样用Drag事件?能否详细点?
      

  7.   

    那为什么加了个无任何代码的Timer,就鼠标同样拖个文件 又可以激发MouseEnter事件了呢?
      

  8.   

    这个应该用Drag&Drop操作来处理,Windows本身已经提供了完善的支持,Delphi封装得也很好。不要自己搞。
      

  9.   


    我是按照 Listview 接收拖入文件那一样例做的,试了很久都没问题,现在就是这具问题不知如何“完美”一些的解决
      

  10.   

    不需要用WM_MouseEnter消息来处理,写一个窗体(被拖放文件的接收者)的OnDragOver事件处理就可以了。