如何在Delphi中跟踪TScrollBox的滚动

2023-11-21

有没有简单的方法可以用滚动条跟踪 TScrollbox 内容的滚动? 我有几个 TScrollBox 组件(每个组件内部都有一些组件)并且希望保持它们同步。如果其中一个滚动框滚动(垂直或水平),我需要同步滚动其他滚动框。这就是为什么我需要知道滚动条位置何时改变。 奇怪的是,Delphi 的 TScrollbox 组件没有这样的事件。


这可以通过为消息添加自己的事件来完成WM_HSCROLL and WM_HSCROLL.
该示例使用插入器类,这也可以通过自己的组件创建来完成。
如果不需要两个事件,也可以只实现一个,并在两个消息过程中调用。

unit Unit3;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
  TScrollBox=Class(VCL.Forms.TScrollBox)
    procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
  private
    FOnScrollVert: TNotifyEvent;
    FOnScrollHorz: TNotifyEvent;
  public
   Property OnScrollVert:TNotifyEvent read FOnScrollVert Write FonScrollVert;
   Property OnScrollHorz:TNotifyEvent read FOnScrollHorz Write FonScrollHorz;
  End;

  TForm3 = class(TForm)
    ScrollBox1: TScrollBox;
    Panel1: TPanel;
    Panel2: TPanel;
    ScrollBox2: TScrollBox;
    Panel3: TPanel;
    Panel4: TPanel;
    procedure FormCreate(Sender: TObject);
  private
    procedure MyScrollHorz(Sender: TObject);
    procedure MyScrollVert(Sender: TObject);
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

{ TScollBox }

procedure TScrollBox.WMHScroll(var Message: TWMHScroll);
begin
   inherited;
   if Assigned(FOnScrollHorz) then  FOnScrollHorz(Self);
end;

procedure TScrollBox.WMVScroll(var Message: TWMVScroll);
begin
   inherited;
   if Assigned(FOnScrollVert) then  FOnScrollVert(Self);
end;

procedure TForm3.MyScrollVert(Sender: TObject);
begin
    Scrollbox2.VertScrollBar.Position := Scrollbox1.VertScrollBar.Position
end;

procedure TForm3.MyScrollHorz(Sender: TObject);
begin
    Scrollbox2.HorzScrollBar.Position := Scrollbox1.HorzScrollBar.Position
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
  ScrollBox1.OnScrollVert := MyScrollVert;
  ScrollBox1.OnScrollHorz := MyScrollHorz;
end;

end.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Delphi中跟踪TScrollBox的滚动 的相关文章

  • Delphi XE2 Firemonkey 示例应用程序未在 MAC 上运行

    我正在尝试在 Mac 上运行示例 Firemonkey 应用程序 但我在 Mac 中收到以下消息 dyld Library not loaded rpath libcgunwind 1 0 dylib Referenced from Use
  • Delphi XE5 REST/Android 客户端“会话已过期”

    我有一个REST Server与Android Client 都在Deplhi Xe5 Android客户端成功连接Rest服务器 在我的服务器中我有一个TDSHttpWebDispatcher with SessionTimeout 12
  • 如何追踪“地址 00000000”的访问违规

    我知道如何创建 map 文件来在错误消息包含实际地址时跟踪访问冲突错误 但是如果错误消息说怎么办 Access violation at address 00000000 Read of address 00000000 我从哪里开始寻找这
  • 在 Delphi 2007 中将具有透明度的位图保存为 PNG

    我有一个包含透明度信息的 Delphi 位图 32 位 我需要将其转换并保存为 PNG 文件 同时保留透明度 我目前拥有的工具是graphics32 Library GR32 PNG 由Christian Budde 提供 和PNGImag
  • 如何向标准集合编辑器添加图标?

    我有一个自定义控件 它利用TCollection and TCollectionItem 在集合编辑器中 我想向每个列表项添加图标 该列表项由内部TImageList 在其父组件内 集合项本身代表图标 我想在这个编辑器中显示相应的图标 如何
  • 在TImageViewer中,如何获取用户点击图片的位置?

    在TImageViewer控件中 用户可以缩放或平移图片 我的问题是 当用户点击图片时 如何获取用户在图片上的点击位置 尤其是用户可以对图片进行放大 缩小或平移之后 如何获取对应的图片点击位置呢 As shown below How to
  • FreePascal x64 上系统单元函数的汇编调用

    我有一些 Delphi 汇编代码 可以在 Win32 Win64 和 OSX 32 上编译并正常工作 XE2 但是 由于我需要它在 Linux 上工作 所以我一直在考虑编译它的 FPC 版本 到目前为止 Win32 64 Linux32 6
  • TColorProperty德尔福柏林10.1.2?

    我正在尝试将组件从 Delphi 7 转换为 Delphi Berlin 平面组件 https sourceforge net projects flatstyle https sourceforge net projects flatst
  • 如何释放 TInterfacedObject 中的 TObject 成员

    我知道接口对象是引用计数的 因此不需要手动释放它 但如果它有一个 TObject 继承成员 我是否应该在析构函数中手动释放该成员 考虑以下代码 program Project2 APPTYPE CONSOLE R res uses Syst
  • Delphi 2010 - 从 XML 文档解码 Base64 编码图像

    我正在尝试从应用程序中的 XML 文档解码 base64 编码的 EMF 图像并将其呈现在屏幕上 但是 它似乎从未出现 如果我将 XML 文档中的数据复制 粘贴到 Notepad 中并使用Base64 Decode选项并将文件另存为 emf
  • 如何用不同的颜色绘制选定的列表框项目?

    是否可以更改 TListBox 中的项目选择焦点颜色和文本颜色 当项目中未启用主题或列表框样式设置为所有者绘制时 项目周围的选择将被涂成蓝色 我相信这是由系统的外观设置全局定义的 我想将所选项目的颜色更改为自定义颜色 举个例子 结果会是这样
  • 如何使 StringGrid 的列适合网格的宽度?

    我已经寻找解决方案很长时间了 但没有任何运气 有谁知道一个简单的方法来做到这一点 例如 我想拉伸网格的第二列以适应网格的宽度 Use the ColWidths财产 像这样 with StringGrid1 do ColWidths 1 C
  • 如何在iOS的Delphi程序中使用IPv6协议

    我尝试在我的移动程序中使用 IPv6 协议 我的服务器位于 NAT 后面的 LAN 内 在服务器上我使用IP端口3000 我已经组织了从路由器端口 45500 到服务器端口 3000 的虚拟服务器 端口转发 在服务器上 我运行 ipconf
  • Delphi中使用FindVCLWindow调用WinHelp32(WinXP Pro SP3 32bit)

    有什么问题吗 procedure TForm1 VCLHelpClick Sender TObject var Ctrl TWinControl begin Ctrl FindVCLWindow Mouse CursorPos if Ctr
  • 将图像加载到 TImageList 并读取它们?

    我试图通过将 jpg 转换为 bmp 然后将其保存到 imagelist1 来将 jpg 加载到图像列表中 从上到下的代码片段 Selectdir 有效 fileexists 部分有效 这用于加载文件夹中的所有图像 所有图像都以 0 jpg
  • Delphi - 如果没有创建类,为什么这个函数可以工作?

    考虑这个类 unit Unit2 interface type TTeste class private texto string public function soma a b integer string end implementa
  • Delphi 的内存分析工具?

    我建立了一个项目并运行它 然后在 Process Explorer 中查看它 结果发现它在启动时使用的 RAM 比我想象的要多 5 倍 现在 如果我的程序运行得太慢 我会将其连接到分析器并让它告诉我什么正在使用我的所有周期 有没有类似的工具
  • Delphi 7 - 处理表单中嵌入框架的 MouseWheel 事件?

    你好 我有一个表格 里面有几个框架 对于某些框架 我希望滚动内容 或至少处理鼠标滚轮事件 我已经尝试过以下方法 只需为每个帧分配一个 OnMouseWheel 事件处理程序 重写父窗体的 MouseWheel 事件 procedure TF
  • Delphi Prism 中 TStringList 的替代品。

    我正在将用 Delphi 2007 Net 编写的应用程序迁移到 Delphi Prism 哪个是替换 TStringList 和 TStrings 类的最佳选择 提前致谢 Bye 只需使用 NET 框架中内置的 List 类型 或者字符串
  • 在网格上拖动时拖动图像更改

    我正在 StartDrag 上创建自定义 DragObject 的实例 procedure TForm1 GridStartDrag Sender TObject var DragObject TDragObject begin DragO

随机推荐

  • 将 ISO 8601 时间格式转换为正常持续时间

    我有一个持续时间字符串 PT1M33S 我想得到以下格式的结果 gt 01 33 谁能告诉我如何使用js或jquery做到这一点 这似乎不是时间格式 只是视频的持续时间 33 Seconds PT1M33S 1 Minute H 小时M 分
  • 如何从字符串中删除换行符?

    我有一个以下格式的字符串 string s This is a Test String n This is a next line t This is a tab n 我想删除所有出现的 n and r从上面的字符串 我努力了string
  • stl::multimap - 如何获取数据组?

    Multimap 本质上具有按键排序的数据组 我想要一种方法来访问这些单独的组并获取它们的聚合值 例如 在一个std multimap lt string int gt 我存储 Group1 1 Group1 2 Group1 3 Grou
  • 类型引用>() { }

    从几天前开始 我开始从事一个网络服务项目 该项目正在使用Jackson编组和解组JSON 对象 所以我的问题是 为什么我总是必须把 当我创建一个实例时TypeReference 我知道构造函数是protected 但为什么是protecte
  • 如果使用 bash 以外的任何东西,我怎样才能拥有 term.el (ansi-term) 跟踪目录

    使用 eshell 或 ansi term 和 bash 时 emacs 会根据您所在的目录更改默认目录变量 所以如果我搬到 home user code project然后使用 ido find file 打开一个文件 它以 CWD 启动
  • 当参数是重载函数时,重载解析如何工作?

    Preamble C 中的重载解析可能是一个过于复杂的过程 理解控制重载解析的所有 C 规则需要付出相当多的脑力劳动 最近我想到参数列表中重载函数名称的存在会增加重载解析的复杂性 由于它恰好是一个广泛使用的案例 所以我发布了一个问题并收到了
  • 如何使用缩进作为 bison 和 flex 的块分隔符

    我很想知道如何在 bison flex 中实现缩进作为块分隔符 就像在 python 中一样 我正在编写自己的编程语言 主要是为了好玩 但我打算将其与游戏引擎一起使用 我将尝试想出一些特殊的东西来最小化样板文件并最大化开发速度 我已经写了一
  • 批量消费消息-RabbitMQ

    我能够使用上面的代码使用多个生产者发送到具有不同路由键的同一交换的多条消息 并且能够将每条消息插入到数据库中 但这会消耗太多资源 因为消息将被一个接一个地插入到数据库中 所以我决定进行批量插入 我发现我可以设置BasicQos 在 Basi
  • 以编程方式渲染 Laravel 7 组件

    我有一个 Laravel 7 组件 如下所示 class Input extends Component public name public title public value public type text Create a new
  • LESS:在 :before 中使用 font-awesome

    我想要一个带有自定义字体 颜色和左侧项目符号的标题的 CSS 选择器 所以我希望我的标题使用我的自定义字体 它是 before伪元素使用 font awesome 所以我想要我的 before拥有 fa类 而整个元素没有这个类 我有这个ht
  • 使用 nginx 和 Gunicorn 运行多个 django 项目

    我在用Ubuntu 18 服务器并使用nginx with gunicorn我跟随数码海洋服务器设置教程 我成功完成了一个项目 但现在我需要在服务器下运行多个项目 这是我的枪鸟设置 command sudo nano etc systemd
  • WCF中的WS是什么意思?

    在wcf中 什么是WS 在WCF中是什么意思 有什么理由将其分组吗 它们是 Web 服务 WS 标准 这篇博文解释一下 WCF 实现的那些 将它们分组是因为它们共同构成了 WS 架构
  • 从 int 到 shared_ptr 的隐式转换

    考虑下面的代码 include
  • 如何拆分分隔字符串以便可以访问单个项目?

    使用 SQL Server 如何拆分字符串以便可以访问项目 x 取一个字符串 Hello John Smith 如何按空格分割字符串并访问索引 1 处应返回 John 的项目 我不相信 SQL Server 有内置的 split 函数 所以
  • 具有交互项的固定效应回归会导致错误

    我正在尝试使用表示路线的地理区域 LoadArea DischargeArea 的交互项来估计面板数据集 使用固定效应规范 它不喜欢交互项 LoadArea DischargeArea 并且在汇总回归时会产生以下错误 mult fe lt
  • 为什么浏览器允许关闭 Javascript? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我很好奇为什么现代浏览器允许关闭 Javascript 现在很清楚 要做任何实质性的现代 Web 应用程序 您都需要集成一些高级别的 Javascript 为什么 javascript 不
  • Windows Phone 创建像 Facebook 一样的侧边菜单栏

    我是 Windows Phone 7 开发新手 我正在尝试创建类似于 Facebook 上使用的侧菜单栏 我创造了usercontrol并添加了不同屏幕的按钮 我还创建了PhoneApplicationPage并添加了一个按钮 当我单击该按
  • MATLAB:设置要并行应用的线条的颜色和样式顺序

    当你设置DefaultAxesColorOrder and DefaultAxesLineStyleOrderMATLAB 将首先循环使用第一种样式的所有颜色 然后再次使用第二种样式循环使用所有颜色 依此类推 看到这个文档 or 相关问题
  • Scala - 柯里化和默认参数

    我有一个带有两个参数列表的函数 我试图部分应用并与柯里化一起使用 第二个参数列表包含所有具有默认值 但不是隐式的 的参数 像这样的东西 def test a Int b Int 2 c Int 3 println a b c 现在 以下一切
  • 如何在Delphi中跟踪TScrollBox的滚动

    有没有简单的方法可以用滚动条跟踪 TScrollbox 内容的滚动 我有几个 TScrollBox 组件 每个组件内部都有一些组件 并且希望保持它们同步 如果其中一个滚动框滚动 垂直或水平 我需要同步滚动其他滚动框 这就是为什么我需要知道滚