我正在Delphi 7中创建一个小项目,并且在表单上有两个列表框。现在我需要同步这些Listbox的滚动条。保证列表框具有相同数量的项目。当用户移动其中一个滚动条时,应进行同步。我想它应该是'Perform'方法,但我是新手。
答案 0 :(得分:5)
要设置列表框的第一行,请使用TopIndex
。
您可以创建TListbox
后代来处理WM_VSCROLL
(如果需要,可以WM_HSCROLL
)。然后,您可以挂钩并更新第二个列表框。这是一个例子。我只是单向挂钩,所以滚动listbox2不会滚动listbox1。
您需要在表单声明之前将此TListBox覆盖添加到您的单元:
TListBox = class(Vcl.StdCtrls.TListBox)
private
FOnScroll: TNotifyEvent;
protected
procedure ListBoxScroll(var Message: TMessage); message WM_VSCROLL;
public
property OnScroll: TNotifyEvent read FOnScroll write FOnScroll;
end;
这会将OnScroll事件添加到列表框中。这个类的实现:
procedure TListBox.ListBoxScroll(var Message: TMessage);
begin
inherited;
if Assigned(FOnScroll) then
FOnScroll(Self);
end;
然后,您可以在代码中连接事件:
procedure TMyForm.FormCreate(Sender: TObject);
begin
listbox1.OnScroll := DoScrollListBox1;
end;
DoScrollListBox1的代码非常简单:
procedure TMyForm.DoScrollListBox1(Sender: TObject);
begin
listbox2.TopIndex := listbox1.TopIndex;
end;
使用滚动条处理滚动。您还需要将以下行添加到列表框的OnClick中,以便键盘操作也会触发滚动。
procedure TMyForm.ListBox1Click(Sender: TObject);
begin
...
listbox2.TopIndex := listbox1.TopIndex;
...
end;