Ich habe meinen Vorherigen Quelltext noch mal überarbeitet und jetzt eine etwas "unsaubere" Lösung gefunden wie ich finde.
Lass mich gerne korregieren bzw. verbessern, nur ist mir nichts anderes eingefallen wie es funktionieren könnte.
Delphi-Quellcode:
//Alle Fenster nach TListView komponenten durchsuchen
For i := 0 To frmMain.MDIChildCount-1 Do Begin
For z := 0 To frmMain.MDIChildren[i].ComponentCount-1 Do Begin
If frmMain.MDIChildren[i].Components[z] Is TListView Then Begin
With TListView(frmMain.MDIChildren[i].Components[z]) Do Begin
If OwnerData Then Begin
//Merken der Selektion sowie Scroll-Position
SetLength(Sel, SelCount);
Idx := 0;
For c := 0 To Items.Count-1 Do Begin
If Items[c].Selected Then Begin
Sel[Idx] := c;
Inc(Idx);
End;
End;{for}
TopIt := TopItem.Index;
//Reset der Listenelemente
Count := Items.Count;
Items.Count := 0;
Items.Count := Count;
//Widerherstellen der Selektion sowie Scroll-Position
For c := 0 To High(Sel) Do Begin
Items[Sel[c]].Selected := True;
End;
//ShowMessage(fGetField(Scroller[TopIt], 'Ident'));
While (TopIt > TopItem.Index) Do Scroll(0, 10);
End;
End;{with}
End;{if}
End;{for}
End;{for}
Meine Lösung macht jetzt folgendes es wird geschaut welche Einträge ausgewählt wurden, dann wird ebenfalls gemerkt wo der
Scrollbalken steht bzw. welcher Eintrag als erstes Sichtbar ist. Dann wird die Liste gelöscht und gleich neu geladen.
Anschliessend werden die Einträge die zuvor markiert waren wieder markiert und die Liste wird an die ursprüngliche Position
gescrollt.
mfg
TUX