如题

解决方案 »

  1.   

    //参考如下代码
    function ControlFromPoint(mParent: TWinControl; mPoint: TPoint): TControl;
    var
      I: Integer;
    begin
      Result := nil;
      if not Assigned(mParent) then Exit;
      for I := 0 to mParent.ControlCount - 1 do begin
        if not mParent.Controls[I].Visible then Continue;
        if PtInRect(mParent.Controls[I].BoundsRect, mPoint) then begin
          if mParent.Controls[I] is TWinControl then
            Result := ControlFromPoint(TWinControl(mParent.Controls[I]),
              Point(mPoint.X - mParent.Controls[I].Left,
                mPoint.Y - mParent.Controls[I].Top));
          if not Assigned(Result) then Result := mParent.Controls[I];
        end;
      end;
    end; { ControlFromPoint }procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    var
      vControl: TControl;
    begin
      case Msg.message of
        WM_RBUTTONDOWN:
        begin
          vControl := ControlFromPoint(Self, ScreenToClient(Mouse.CursorPos));
          if Assigned(vControl) then
          begin
            Caption := vControl.Name;
            Handled := True;
          end;
        end;
      end;
    end;
      

  2.   

    首先是要知道用户什么时候点了右键
    在窗体上放一个TApplicationEvents控件,加上OnMessage的事件处理代码
    直接处理Application.OnMessage也是一样的
    其次就是要知道用户点了什么控件
    ControlFromPoint()函数是通过容器的坐标查到该位置的控件…………
      

  3.   

    TApplicationEvents控件在何处?在那一个面板上?
      

  4.   

    找到了,在Addtional上,让你见笑了.