Hallo,
- welchen ViewStyle benutzt Du im ListView? vsReport oder ...?
- was willst Du erreichen mit der Aktualisierung?
Also ich gehe jetzt mal von vsReport aus.
Du musst folgende Aktionen des Anwenders berücksichtigen die zu einem Scrollvorgang führen.
1. Mausrad = WM_MOUSEWHEEL
2. Benutzung der senkrechten Scrollleiste = WM_VSCROLL
3. und waagerechte Scrollleiste = WM_HSCROLL
4. Cursor-Tasten, PageDown, PageUp, Pos1, Ende = in onKeyPress
5. und alle anderen Tasten die auch zum Scrollen führen,
weil man ja über die Eingabe eines Anfangszeichen der Item-Caption zu diesem Item scrollen kann.
Hier der Code um Mausrad und Scrollleiste Punkt 1. - 3. zu erkennen.
Ich hab mal WM_HSCROLL auskommentiert.
Den Code entsprechend des Beispiels an die richtigen Stellen in deine Unit einbauen.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| private ListView1Proc : TWndMethod; procedure ListView1WindowProc(var Message: TMessage); implementation
{$R *.DFM}
procedure TForm1.ListView1WindowProc(var Message: TMessage); begin ListView1Proc(Message); if ((Message.Msg = WM_VSCROLL) or (Message.msg = WM_MOUSEWHEEL)) then begin if ListView1.Items.Count > 0 then Label1.Caption := 'Gescrollt ! ' +'TopItem.Caption ist jetzt : ' +ListView1.TopItem.Caption; end; end;
procedure TForm1.FormCreate(Sender: TObject); begin ListView1Proc := ListView1.WindowProc; ListView1.WindowProc := ListView1WindowProc; end; end. |
Die weiteren Punkte 4. u. 5. kannst Du im ListView1onKeyPress bearbeiten.