delphi - 将 5 个 ListBox 同步在一起

标签 delphi delphi-7 delphi-2010 delphi-2009

我现在正在做一个小项目,我想同步 5 个列表框一起滚动。列表框的名称是:

KidList
PointList
NoteList
CommentList
CommentListKid
我该怎么做?

最佳答案

您可以尝试以下技术。
首先,添加一个私有(private)字段

  private
    SyncBoxes: TArray<TListBox>;
到您的表单并在创建表单时对其进行初始化:
procedure TForm1.FormCreate(Sender: TObject);
begin
  SyncBoxes := [ListBox1, ListBox2, ListBox3, ListBox4];
end;
然后定义以下插入器类:
type
  TListBox = class(Vcl.StdCtrls.TListBox)
  strict private
    procedure Sync;
  protected
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
    procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
    procedure WMMouseWheel(var Message: TWMMouseWheel); message WM_MOUSEWHEEL;
  end;
实现为
procedure TListBox.CNCommand(var Message: TWMCommand);
begin
  inherited;
  if Message.NotifyCode = LBN_SELCHANGE then
    Sync;
end;

procedure TListBox.Sync;
var
  LB: TListBox;
begin
  for LB in Form1.SyncBoxes do
    if LB <> Self then
      LB.TopIndex := Self.TopIndex;
end;

procedure TListBox.WMMouseWheel(var Message: TWMMouseWheel);
begin
  inherited;
  Sync;
end;

procedure TListBox.WMVScroll(var Message: TWMVScroll);
begin
  inherited;
  Sync;
end;
当然,在一个真正的应用程序中,你会重构它。
结果可能足够好:
Video of four synchronised list boxes being scrolled.
然而,列表框的滚动动画使同步有点延迟。

关于delphi - 将 5 个 ListBox 同步在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62729699/

相关文章:

html - 在Delphi中解析HTML找到所有图片的地址

delphi - Application.OnException 无法处理所有异常 - Delphi

windows - 如何解决 TPrintDialog 不保存设置?

delphi - VirtualStringTree - 使用对象时添加/处理子节点/子节点的正确方法?

delphi - 如何在 Abbrvia zip 存档中设置基线文件夹?

delphi - 同步两个列表框的滚动条

delphi - 如何将指针值转换为字符串

sql - Delphi:如何将列表作为参数传递给 SQL 查询?

delphi - 在 delphi 7.0 中创建打包结构时出现错误 EStackOverflow

web-services - 使用带有身份验证的 Web 服务总是给出消息 Authentication required