一个图标,双击后,creat,show一个form,由于事件比较长,这个form却把鼠标点击事件记忆着,点了这个form的一个区域,这是不允许的。

解决方案 »

  1.   

    show事件执行中
    form.OnClick := nil; 或者
    form.OnMouseDown := nil;
    结束了
    form.OnClick := ClickProcedure()
    ......
      

  2.   

    show事件中执行后,什么时候恢复呢?难道要加个按钮,或者定时器延时?
      

  3.   

    将鼠标固定在某一点,禁止移动,比如类似某些网管软件,禁止在屏幕最右下角.procedure  EnableMouse(Enabled: Boolean);   
    var   
        R:TRect;   
        p:TPoint;   
    begin   
       if Enabled then   
          ClipCursor(nil)    //解除鼠标锁定
       else
          begin   
            GetCursorPos(p);   
            R:=Rect(p.X,p.Y,p.X,p.Y);   
            ClipCursor(@R);//锁定鼠标   
          end;   
    end;   
        
    begin   
         EnableMouse(False);  //锁定 
            处理事务   
          EnableMouse(True);   //解除
    end
      

  4.   

    谢谢各位朋友。
    主Form有个图片,大约在中间的位置,双击后,showModal一个Form,鼠标刚才点在图片的那个坐标位置(当然,showModal的这个Form是没有图片的,但是位置和主Form相同,也就是屏幕中心)。通俗的说,在屏幕中间双击了鼠标,showmodal的form的中间也被点了鼠标,后者是我不愿意看到的。
      

  5.   

    很简单啊。对showModal而言,可以在它的OnClick事件里预先检测任务是否完成:procedure TTheForm.FormClick(Sender :TObject);
    begin
     if not TaskProcessing then ;任务正在处理就不响应Click事件
     begin
      ......
     end;
    end;再或者动态设置事件,Create TheForm时,设置TheForm.OnClick :=nil,完成任务后,再设置TheForm.OnClick :=FormClick;