右键单击TPopupMenu解释为拖放

时间:2012-08-13 07:37:35

标签: drag-and-drop popupmenu c++builder-6

我有一个按预期工作的弹出菜单。同一对象上的拖放功能按预期工作。把它们放在一起,然后......

右键单击时会出现弹出菜单。 Wile菜单就在那里,随后左键单击关闭弹出菜单,但仍然在对象上调用拖放功能,就好像最初的右键单击是左键单击到现在为止一直被释放。

void __fastcall myGrid::eDragDrop(System::TObject *Sender, System::TObject *Source, int X, int Y)
{
  while((Sender != this) && (Sender != NULL))
  {
    TControl *control = dynamic_cast < TControl * > (Sender);
    if(control != NULL)
    {
      X += control->Left;
      Y += control->Top;
      Sender = control->Parent;
    }
    else
    {
      Sender = NULL;
    }
  } // while
  // Check for a drop onto the Chart

  if((Column != NULL)&&(Column->Visible)&& (Column->HeaderIndex>=0))
  {
    int Xt = X - FHeaderSB->Left + FHorzScroll->Position;
    int HeaderIndex = Column->HeaderIndex;
    if((Xt > FHeaderSections->Items[HeaderIndex]->Left) && (Xt < FHeaderSections->Items[HeaderIndex]- >Right))
    {
      Xt -= FHeaderSections->Items[HeaderIndex]->Left;
      GotDragDropTime = true;
      DragDropTime = Column->GetTimeFromPosition(Xt);
    } // if
  } // if Visible


  if(fDragDrop != NULL)
  {
    fDragDrop(Sender, Source, X, Y);
  }
}

我做错了什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

发现它!在OnMouseDown中调用的函数中存在疏忽,其中设置了PendingDrag标志而未检查单击了哪个按钮。

我没有意识到在我们的代码中控制了多少拖动功能。毕竟,这不是Borland C ++ Builder 6的错误。

感谢您提供富有洞察力的评论。他们帮助我找到了这个错误。