如何截获listView的滚动条事件(50分)

  • 主题发起人 主题发起人 doublefishrhy
  • 开始时间 开始时间
D

doublefishrhy

Unregistered / Unconfirmed
GUEST, unregistred user!
如何截获listView的滚动条事件,并编程显示listView中当前所见到的第一行的信息?
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, AppEvnts;

type
tmylistbox = class(tlistbox)
public
procedure onscroll(var msg:tmessage);message WM_VSCROLL;
end;
TForm1 = class(TForm)
ApplicationEvents1: TApplicationEvents;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
listbox1:tmylistbox;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure tmylistbox.onscroll(var msg:tmessage);
begin
inherited;
//beep;
//add your code here
end;

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
listbox1 := tmylistbox.Create(self);
listbox1.Parent := form1;
for i:=0 to 1000 do
listbox1.Items.Add(inttostr(i));

end;

end.
 
To xeen:
我用的是listview,不是listBox.listview没有onscroll事件。
 
xeen的方法是自己继承一个类,处理scroll消息。
不是什么onscroll,楼上你理解错了。
type
TForm1 = class(TForm)
Button1: TButton;
lv1: TListView;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
OldPanelWndProc: TWndMethod;
procedure lvWndProc(var Message: TMessage);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
OldPanelWndProc := lv1.WindowProc;
lv1.windowProc := PanelWndProc;
end;

procedure TForm1.lvWndProc(var Message: TMessage);
begin
case Message.Msg of
WM_HSCROLL:
Color := clWhite;
WM_VSCROLL:
Color := clRed;
end;
OldPanelWndProc(Message);
end;
 
不好意思我看错了,listbox和listview的原理是一样的。你捕捉不到scroll消息
是因为控件不把这个消息发个它的parent而自己内部处理,你从原控件继承个
新控件捕获它就行了.
 
真不好意思,我对Dephi不是很熟,对于继承的概念,理解不深,谢谢而位的指导。
 
接受答案了.
 
后退
顶部