使用此方法时如何捕获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我创建包含一些东西的面板,并将它们对齐alTop。因此,我的面板与顶部对齐,与旧图片相似,如下图所示:
所以,我添加了panel1,它将自己添加到顶部,然后我添加了panel2它将自己添加到下面的panel1,依此类推(就像在图片中一样)。
现在,我希望能够移动面板(更改他们的顺序),所以我使用上面的代码将我附加到每个面板上的onMouseDown事件。
所以它工作正常,但我需要知道何时发生实际的拖放,因为我需要在拖放发生后执行一些代码,并且每次鼠标单击时都不能执行该代码。
那你有什么建议? 这种方法很好,因为看起来很简单,并且在拖动时也会显示面板。所以我需要一个类似的解决方案或一种区分onMouseDown的方法:当它只是点击时和拖放时
谢谢