Delphi在容器中拖放面板

时间:2015-01-23 20:01:19

标签: delphi drag-and-drop

使用此方法时如何捕获onDargDrop事件:

procedure TMain.layerRowMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  (Sender as TPanel).Perform(wm_nclbuttondown,HTCAPTION,0);
// and now in order to preserve the nice alignment of panels...
  for i := 0 to Main.ComponentCount - 1 do
    begin
      if Main.Components[i] is TWinControl then
        if TWinControl(Main.Components[i]) is TPanel then
        if (TWinControl(Main.Components[i]) as TPanel).Parent=Main.ScrollBox1 then
          begin
            (TWinControl(Main.Components[i]) as TPanel).Align:=alTop;
          end;
    end;
  end;

我的意思是,拖放工作但是OnMouseDown事件...每次我点击面板时都会触发。我希望能够区分点击和拖动。

更具体地说,我有一个面板,里面有一个滚动条(alClient)。 然后在运行时,onButtonClick我创建包含一些东西的面板,并将它们对齐al​​Top。因此,我的面板与顶部对齐,与旧图片相似,如下图所示:

enter image description here

所以,我添加了panel1,它将自己添加到顶部,然后我添加了panel2它将自己添加到下面的panel1,依此类推(就像在图片中一样)。

现在,我希望能够移动面板(更改他们的顺序),所以我使用上面的代码将我附加到每个面板上的onMouseDown事件。

所以它工作正常,但我需要知道何时发生实际的拖放,因为我需要在拖放发生后执行一些代码,并且每次鼠标单击时都不能执行该代码。

那你有什么建议? 这种方法很好,因为看起来很简单,并且在拖动时也会显示面板。所以我需要一个类似的解决方案或一种区分onMouseDown的方法:当它只是点击时和拖放时

谢谢

0 个答案:

没有答案