You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi教程:滚动Form时固定TPanel位置的方法

Delphi 实现滚动时TPanel固定在Form顶部的分步教程

针对刚接触Delphi的新手,这里提供两种简单易懂的实现方法,一步步操作即可完成:

前置准备

  • 打开Delphi,新建VCL应用程序
  • 在Form上放置一个TPanel:设置Caption为“固定顶部面板”,调整高度到合适值(比如50)
  • 给Form添加足够多的控件(比如多个TButton),让Form内容超出显示范围,确保Form的AutoScroll属性为True(默认就是开启状态)

方法一:通过Form滚动事件实时调整Panel位置

这种方法直接利用Form的滚动事件,抵消滚动带来的位置偏移:

  1. 选中Form,在Object Inspector的「Events」标签页找到OnScroll事件,双击进入代码编辑器
  2. 调整Panel属性:把Align设为alNone,手动设置Left := 0、Top := 0、Width := Form1.ClientWidth,让它初始铺满Form顶部
  3. 在OnScroll事件中添加代码:
procedure TForm1.FormScroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
  // 垂直滚动时,让Panel的Top等于滚动条位置,抵消滚动偏移
  Panel1.Top := Self.VertScrollBar.Position;
end;
  1. 为了让Panel在Form resize时保持宽度一致,给Form的OnResize事件添加代码:
procedure TForm1.FormResize(Sender: TObject);
begin
  Panel1.Width := Self.ClientWidth;
end;
  1. 运行程序,拖动垂直滚动条,Panel会始终停在Form窗口的顶部。

方法二:用TScrollBox管理滚动内容(更推荐)

这种方法把滚动区域和固定面板分离,结构更清晰,适合内容较多的场景:

  1. 清空Form上的多余控件,放置一个TScrollBox到Form上
  2. 设置ScrollBox的Align属性为alClient,让它填满Form除顶部Panel外的所有区域
  3. 把需要滚动的所有控件都拖到ScrollBox内部,调整控件位置让ScrollBox出现滚动条
  4. 保持TPanel的Align属性为alTop,它会自动固定在Form顶部,不属于ScrollBox的滚动区域
  5. 运行程序,拖动ScrollBox的滚动条,Panel始终固定在顶部,内容在ScrollBox内滚动。

注意事项

  • 方法一中如果保留Panel的alTop对齐,Form滚动时Panel会跟着ClientArea偏移,所以必须设为alNone
  • 方法二更适合复杂界面,避免了手动处理滚动事件的繁琐

内容的提问来源于stack exchange,提问作者Yourdadsbf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 03:15:12