拖放以在 ScrollBox 内垂直排列

Nel*_*ake 3 delphi

我被要求对另一个开发人员 10 多年前在 Delphi 7 中所做的项目进行一些更改。这是一段专有代码,因此我将非常具体。

“Container”是一个 TScrollBox,里面的面板是 TSpkRollPanel 的——一个可折叠或可扩展的 TPanel 衍生物。

我希望下图能说明一切。这真的很简单。我应该使 TSpkRollPanel 元素仅垂直拖放,以便它们可以按所需顺序排列。我花了几个小时来加快 Delphi 的速度(我已经 10 多年没见过了)

如果有人能指出我正确的方向,我将不胜感激。我精通德尔福,只是生疏了。

在此处查看示例 GUI

Tom*_*erg 6

使用标准TPanel面板,以下工作正常,很可能也适用于您的面板。步骤如下:

  1. 选择所有面板
  2. Align所有面板的属性设置为AlTop
  3. DragMode所有面板的属性设置为dmAutomatic

切换到事件视图 Object Inspector

  1. 双击输入字段OnDragDrop以创建事件处理程序
  2. 双击输入字段OnDragOver以创建事件处理程序

如果创建的两个事件处理程序的名称包含特定面板的标识符,您可能需要重命名事件处理程序以反映它们对所有面板都是通用的。

6 最后,将代码添加到事件处理程序

procedure TForm1.PanelDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  TPanel(Source).Top := TPanel(Sender).Top - 5;
end;


procedure TForm1.PanelDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := True;
end;
Run Code Online (Sandbox Code Playgroud)

该解决方案的工作原理是,当一个面板 (A) 落在另一个 (B) 上时,它 (A) 将按照对齐顺序放置该面板 (B),将 (B) 和其他面板向下推。