1

期待どおりに機能するポップアップメニューがあります。同じオブジェクトのドラッグアンドドロップ機能は期待どおりに機能します。それらをまとめて...

右クリックするとポップアップメニューが表示されます。メニューが表示されている間、ポップアップメニューを左クリックしてもオブジェクトを左クリックすると、ドラッグアンドドロップ機能が呼び出されます。これは、最初の右クリックが、これまで保持されてから離された左クリックであるかのように行われます。 。

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);
  }
}

私は何を間違えましたか?どうすればこれを修正できますか?

4

1 に答える 1

0

それを見つけた!どのボタンがクリックされたかをチェックせずOnMouseDownにフラグが設定された場所で呼び出される関数に見落としがありました。PendingDrag

コードでドラッグ機能がどれだけ制御されているかはわかりませんでした。結局のところ、それはBorland C ++Builder6のせいではありませんでした。

洞察に満ちたコメントをありがとう。彼らは私がバグを見つけるのを手伝ってくれました。

于 2012-08-13T13:54:55.780 に答える