[DUG] Listview problem

David O'Brien Dave at iccs.co.nz
Fri Feb 25 16:01:50 NZDT 2011


Sorted it thanks, had mixed versions of code in the component. The
events do fire...

 

From: delphi-bounces at delphi.org.nz [mailto:delphi-bounces at delphi.org.nz]
On Behalf Of Jolyon Smith
Sent: Friday, 25 February 2011 3:43 p.m.
To: 'NZ Borland Developers Group - Delphi List'
Subject: Re: [DUG] Listview problem

 

A WM_VSCROLL message handler works perfectly for me.

 

However, this will only be sent for scrollbar directed scrolling.  To
also handle mousewheel scrolling you will have to implement a
WM_MOUSEWHEEL message handler  (and WM_HMOUSEWHEEL if appropriate to
your needs).  Could it be mouse scrolling that you are missing ?

 

I would also note that you will almost certainly want to distinguish
between H and V scrolling, rather than have a "universal" "some sort of
scrolling has occurred" notification.  You may also wish to be able to
respond both before and after scrolling has occurred.

 

 

In my list view class I have:

 

    TScrollNotification = (

                              snBeforeHScroll,

                              snBeforeHWheel,

                              snBeforeVScroll,

                              snBeforeWheel,

                             snHScroll,

                              snHWheel,

                              snVScroll,

                              snWheel

                             );

 

 

  procedure TXListview.WMVScroll(var aMessage: TWMVScroll);

  begin

    DoScroll(snBeforeVScroll);

    inherited;

    DoScroll(snVScroll);

  end;

 

  procedure TXListview.WMHScroll(var aMessage: TWMHScroll);

  begin

    DoScroll(snBeforeHScroll);

    inherited;

    DoScroll(snHScroll);

  end;

 

 

 

and similar for mousewheel messages of course, where DoScroll:

 

 

  procedure TXListview.DoScroll(const aNotification:
TScrollNotification);

  begin

    if (aNotification in [snBeforeHScroll, snBeforeVScroll,
snBeforeHWheel, snBeforeWheel]) then

      CancelEdit;

 

    if Assigned(fOnScroll) then

      fOnScroll(self, aNotification);

  end;

 

 

i.e. my listview also provides a facility for sub-item editing and when
scrolling occurs, the first thing I do before doing the actual scrolling
is dismiss any sub-item editor that may be active, before then firing
the OnScroll event to allow my application code to respond as it may
require.

 

hth

 

 

From: delphi-bounces at delphi.org.nz [mailto:delphi-bounces at delphi.org.nz]
On Behalf Of David O'Brien
Sent: Friday, 25 February 2011 15:09
To: NZ Borland Developers Group - Delphi List
Subject: [DUG] Listview problem

 

I am working on an application (D2009) where I need to know when a
TListView is Scrolled.

I have used Application.OnMessage to look for WM_VScroll messages, but
they do not happen, also have tried creating the below which I thought
should work:

 

  TLVScrollEvent = procedure(Sender: TObject) of object;

 

  TICListView = class(TListView)

  private

    FOnScroll: TLVScrollEvent;

  protected

    Procedure WMVScroll( Var Msg: TMessage ); message WM_VSCROLL;

    Procedure WMHScroll( Var Msg: TMessage ); message WM_HSCROLL;

    property OnScroll: TLVScrollEvent read FOnScroll write FOnscroll ;

  end;

 

procedure Register ;

 

implementation

 

procedure Register;

begin

  RegisterComponents('Dave', [TICListView]);

end;

 

procedure TICListView.WMHScroll(var Msg: TMessage);

begin

  OnScroll ;

  inherited;

end;

 

procedure TICListView.WMVScroll(var Msg: TMessage);

begin

  OnScroll ;

  inherited;

end;

 

which also doesn't fire. I have written a list of all messages fired
when the scrollbar is moved, but there doesn't seem to be anything
useful...

 

Anyone have a solution?

 

Regards,

Dave.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserver.123.net.nz/pipermail/delphi/attachments/20110225/1908553a/attachment-0001.html 


More information about the Delphi mailing list