Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListView-Position bei ShowModal (https://www.delphipraxis.net/151044-listview-position-bei-showmodal.html)

easywk 4. Mai 2010 08:51


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

himitsu 4. Mai 2010 08:56

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.

easywk 4. Mai 2010 09:00

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 ...

himitsu 4. Mai 2010 09:04

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;

uligerhardt 4. Mai 2010 09:05

Re: ListView-Position bei ShowModal
 
Wie scrollst du denn? Mit TListItem.MakeVisible?

easywk 4. Mai 2010 09:13

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;

freak4fun 4. Mai 2010 09:20

Re: ListView-Position bei ShowModal
 
Und wenn du vor dem ShowModal noch ein Refresh für die TListView aufrufst?

easywk 4. Mai 2010 09:41

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 11:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz