这两个东西(wmnchittest, Tform1.Shape3ContextPopup)不是一个啊,会让人误会。anyway:TLabel不是一个真正的窗口对象,它是Delphi虚拟的,它没有窗口句柄。事实上,如果它是放在Form1上的(其Parent=Form1),那么WM_NCHITTEST会屏蔽LABEL的鼠标事件的(如:OnContextPopup, OnMouseDown, OnMouseMove, OnMouseUp),一个解决办法是,你要在WM_NCHITTEST中判断鼠标的落点是不是在一个控件上,用ControlAtPos方法可以做到。

解决方案 »

  1.   

    哦,是这样,我在Tform1的类的实现区写入的是:
    procedure Tform1.wmnchittest(var msg:tmessage);
    begin
      inherited;
      if msg.Result=htclient then msg.Result:=htcaption;
      end;
    这样之后,设定的Labelclick鼠标事件就无效了,但是用按钮就可以!
    那么具体如何让Labelclick鼠标事件有效?谢谢!
      

  2.   

    谢了,抱歉太忙,没能回来看帖子。以后再有这样的事情,请给我发邮件:agui.csdn @ 263.net 不过5/21以后没法用了,到时再想想办法了。不知道你是不是已经解决了,我的解决办法:procedure Tform1.wmnchittest(var msg:TWMNCHitTest); // !!!
    var
      p: TPoint;
    begin
      inherited;  if msg.Result=htclient then 
      begin
        // 转换一下坐标
        p := ScreenToClient( Point(msg.XPos, msg.YPos) );
        if ControlAtPos(p, True, True)<>nil then 
          msg.Result:=htcaption;
      end;
    end;