![]() |
ListView-Position bei ShowModal
Moin, moin,
irgendwie stehe ich gerade ziemlich auf dem Schlauch :-) Ich habe ein TListView mit vsReport. Im FormCreate des Formulars fülle ich die Liste, markiere einen Eintrag und srolle die Liste dann auf diesen Eintrag. Anschließend zeige ich das Formular mit ShowModal an. Leider ist zwar der gewünschte Eintrag markiert, aber die Liste ist nicht gescrollt sondern steht ganz oben. Die Funktionen zum Markieren und Scrollen funktionieren. Wenn ich die gleiche Aktion, die ich momentan im FormCreate mache, nach dem ShowModal (z.B. bei einem ButtonClick) mache, wird sauber gescrollt. Ich habe irgendwie den Verdacht, dass mir das ShowModal die Position wieder zurücksetzt. Hat jemand eine Idee dazu? Gruß easy |
Re: ListView-Position bei ShowModal
Vieles funktioniert halt nicht (richtig), wenn das Control nicht sichtbar ist.
(oftmals werden die Controls erst richtig erstellt, wenn sie angezeigt werden) Verschiebe das Scrollen mal nach OnShow ... vielleicht geht es so. |
Re: ListView-Position bei ShowModal
Habe ich schon ausprobiert. Funktioniert leider auch nicht. Und ich wüsste nicht, wie ich nach dem ShowModal noch mal ans Ruder komme um dann zu scrollen ...
|
Re: ListView-Position bei ShowModal
Was passiert denn, wenn du mal .Show, statt .ShowModal verwendest?
(natürlich die Form danach nicht sofort wieder verschwinden lassen) bzw. versuch es mal so.
Delphi-Quellcode:
MyForm.Show;
Application.ProcessMessages; {hier Scrollen} MyForm.Hide; MyForm.ShowModal; |
Re: ListView-Position bei ShowModal
Wie scrollst du denn? Mit TListItem.MakeVisible?
|
Re: ListView-Position bei ShowModal
Aufruf mit Show anstatt ShowModal funktioniert leider auch nicht. Auch nicht, wenn ich dazwischen das Application.ProcessMessages habe. Ich habe wirklich den Verdacht, dass im Show die Scrollposition wieder auf ganz oben gesetzt wird.
Scrollen tue ich mit einer Funktion, die ich so schon häufig eingesetzt habe:
Delphi-Quellcode:
procedure ListViewScrollTo(Liste: TListView; ToIndex: Integer);
var dy:Integer; begin if (Liste.Items.Count>1) and (ToIndex>0) then begin // Höhe einer Zeile dy:=(ToIndex-Liste.TopItem.Index)* (Liste.Items[Liste.TopItem.Index+1].GetPosition.Y- Liste.Items[Liste.TopItem.Index].GetPosition.Y); Liste.Scroll(0,dy); end; end; |
Re: ListView-Position bei ShowModal
Und wenn du vor dem ShowModal noch ein Refresh für die TListView aufrufst?
|
Re: ListView-Position bei ShowModal
Ok, ich glaube jetzt habe ich den Grund gefunden. Das Liste.Scroll() funktioniert in diesem Fall noch nicht. Wenn ich mir mittels Debugger Form.Liste.TopItem.Index anzeigen lassen, dann steht dort nach dem Aufruf meine Scroll-Funktion normalerweise der korrekte Wert drinnen. Mache ich das aber, ehe das Control überhaupt angezeigt worden ist, bleibt TopIndex immer auf 0, obwohl Liste.Scroll(0,dy) mit einem eindeutige dy-Wert aufgerufen wird.
Benutze ich anstatt meiner Scroll-Funktion Liste.ItemFocused.MakeVisible(FALSE) dann funktioniert es. Zwar steht der markierte Eintrag dann nicht (wie eigentlich gewollt) oben in der Liste sondern irgendwo in der Liste, aber immerhin ist er überhaupt sichtbar. Besser als gar nichts. Erstmal danke für die vielen Hinweise easy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 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 by Thomas Breitkreuz