rt

解决方案 »

  1.   

    对于以报表方式显示的ListView控件,利用SendMessage函数发送LVM_GETTOPINDEX消息个体控件摁扣以获得控件当前位于ListView视图内最顶端的Item在ListView中的索引。如果滚动了ListView,该值会改变,你可以使用一个笨办法,利用一个Timer控件,每一段时间发送LVM_GETTOPINDEX消息,这样就可以得知ListView是否被滚动。以下是VB的例子,你自己转换吧
       Option Explicit 
         
        Const LVM_FIRST = &H1000 
        Const LVM_GETTOPINDEX = (LVM_FIRST + 39) 
         
        Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ 
         (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ 
         lParam As Any) As Long 
         
        Private Sub Command1_Click() 
         Debug.Print SendMessage(ListView1.hwnd, LVM_GETTOPINDEX, 0, 0) 
        End Sub 
         
        Private Sub Form_Load() 
         Dim x As ListItem 
         Dim i As Integer 
         
         For i = 1 To 20 
         Set x = ListView1.ListItems.Add(, , "Item" + Str(i)) 
         Next i 
        End Sub 
        点击Command1就可以得到当前位于ListView视图内最顶端的Item在ListView中的索引。
      

  2.   

    处理WM_VSCROLL和WM_HSCROLL消息:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, AppEvnts, ComCtrls;type
      TListView = class(ComCtrls.TListView)
        procedure WMVScroll(var Message: TMessage); message WM_VSCROLL;
        procedure WMHScroll(var Message: TMessage); message WM_HSCROLL;
      end;type
      TForm1 = class(TForm)
        ListView1: TListView;
        ApplicationEvents1: TApplicationEvents;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TListView.WMVScroll(var Message: TMessage);
    begin
      ShowMessage('VScroll');
    end;procedure TListView.WMHScroll(var Message: TMessage);
    begin
      ShowMessage('HScroll');
    end;end.