![]() |
Zwei Listviews parallel scrollen
Hallo, ich habe hier zwei Listviews die Daten anzeigen, die der Benutzer miteinander vergleichen möchte. Zuerst hatte jede Listview eine vertikale Scollbar. Nun habe ich über ShowScrollBar(EntladeListview.Handle, SB_VERT, false); die Scrollbar an einer Box ausgeschaltet. Nun soll ein bewegen an der anderen Scrollbar beide Listviews paralllel scrollen. Ist so was möglich ?
|
AW: Zwei Listviews parallel scrollen
Musst einfach das Event abgreifen und es an das andere Control schicken:
Delphi-Quellcode:
Das behandelt aber nun nur das Scrollen über den Scrollbalken und nicht über Tastatur oder Mausrad.
type
TListView = class(ComCtrls.TListView) private fLinked: TListView; protected procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL; public property Linked: TListView read fLinked write fLinked; end; procedure TListView.WMVScroll(var Message: TWMVScroll); var vpos1, vpos2: Integer; begin inherited; if Assigned(fLinked) then begin vpos1 := GetScrollPos(Handle, SB_VERT); vpos2 := GetScrollPos(fLinked.Handle, SB_VERT); if vpos1 <> vpos2 then fLinked.Perform(LVM_SCROLL, 0, vpos1 - vpos2); end; end; |
AW: Zwei Listviews parallel scrollen
Danke. Ist genau das was ich gescuht habe
|
AW: Zwei Listviews parallel scrollen
Eine weitere Möglichkeit ist das Auswerten von
![]() ![]() |
AW: Zwei Listviews parallel scrollen
Wie überträgt man z.B. das Topitem? Das ist eine Read-Only Property.
|
AW: Zwei Listviews parallel scrollen
Zitat:
Die Reihenfolge ist dabei auch wichtig. Erst ItemIndex setzen und dann positionieren. Dieses Geraffel lässt man dann am Besten in ![]() |
AW: Zwei Listviews parallel scrollen
Izmir schon klar, das man das Item nicht zuweisen kann. Mich hätte nur interessiert, wie ich die zweite Listview so scrollen kann, das das TopItem 'das gleiche' ist. Offenbar muss man das wohl per Hand mit ScrollBy machen, bis der Index vom TopItem passt.
|
AW: Zwei Listviews parallel scrollen
Zitat:
|
AW: Zwei Listviews parallel scrollen
Wieso nicht? Wenn dieses 'ScrollBy' oder einer der Scroll-Methoden es erlaubt, um ein paar Pixel in vertikaler Richtung im Report-Modus zu scrollen, sollte das doch gehen...
Delphi-Quellcode:
Wenn die Items alle gleich hoch sind, kann man auch gleich direkt dorthin scrollen, so etwa.
Procedure Synchronize (lvMaster, lvSlave : TListView);
var topIndex, curIndex, delta : Integer; begin topIndex := lvMaster.Items.IndexOf(lvMaster.TopItem); curIndex := lvSlave.Items.IndexOf(lvSlave.TopItem); delta := Math.Sign(topIndex-curIndex); // while lvSlave.Items.IndexOf(lvSlave.TopItem)<>topIndex do lvSlave.Scroll(0,delta); End;
Delphi-Quellcode:
Habs abern nicht probiert, nur gelesen.
// Ich weiß nicht genau, ob 'Scroll' absolut oder relativ scrollt. Relativ wäre so
lvSlave.Scroll (0, lvSlave.ItemHeight*(topIndex - curIndex)); // Absolut so lvSlave.Scroll (0, lvSlave.ItemHeight*topIndex); Die Methode kann man per Timer aufrufen oder im OnIdle. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz