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 In ListView zum letzten Item scrollen (https://www.delphipraxis.net/79670-listview-zum-letzten-item-scrollen.html)

BlueStarHH 26. Okt 2006 10:38


In ListView zum letzten Item scrollen
 
Wie kann ich in einer TListView zum letzen Item scrollen? Wichtig dabei ist, dass die TListView in OnFormCreate mit Daten gefüllt wird und bevor das Fenster dem User angezeigt werden soll, soll gescrollt werden. Die folgenden zwei Lösungsmöglichkeiten funktioniert nicht, es wird nicht gescrollt:

Delphi-Quellcode:
1) ListView.Items[ListView.Items.Count-1].MakeVisible(false);

2) ListView.Scroll(0,x);
Danke + Gruß

Gollum 26. Okt 2006 10:41

Re: In ListView zum letzten Item scrollen
 
Hallo,

so sollte es funktionieren:
Delphi-Quellcode:
ListView1.Selected:=ListView.Items[ListView.Items.Count-1];
ListView1.Selected.MakeVisible(False);

BlueStarHH 26. Okt 2006 10:45

Re: In ListView zum letzten Item scrollen
 
Zitat:

Zitat von Gollum
Hallo,

so sollte es funktionieren:
Delphi-Quellcode:
ListView1.Selected:=ListView.Items[ListView.Items.Count-1];
ListView1.Selected.MakeVisible(False);

Klappt leider auch nicht. Es wird weder gescrollt, noch ein Eintrag selektiert. Die ListView steht also immer noch am Anfang.

hoika 26. Okt 2006 10:54

Re: In ListView zum letzten Item scrollen
 
Hallo,

ListView.Items[ListView.Items.Count-1].MakeVisible(false);

klappt in FormActivate.

Hier solltest du nur aufpassen, dass das mehrmals aufgerufen werden kann.
Also am einfachsten eine Form-Variable bFirstInForm oder so,
die in FormCreate auf True, in FormActivate auf False gesetzt wird.
Delphi-Quellcode:
FormActivate;
begin
  if bFirstInForm then
  begin
    bFirstInForm:= False;
   
    ListView.Items[ListView.Items.Count-1].MakeVisible(false);
  end;
end;
Das Scrollen geht so schnell, dass der Nutzer das in FormActivate
gar nicht mitbekommt.

Heiko

Gollum 26. Okt 2006 10:57

Re: In ListView zum letzten Item scrollen
 
Hallo,

mal eben dumm gefragt: sind in der Liste überhaupt Einträge vorhanden?
Ich habe gerade den geposteten Beispielcode in der OnCreate ausprobiert. Bei mir macht die Liste das erwartete.

Sko 26. Okt 2006 10:59

Re: In ListView zum letzten Item scrollen
 
Du könntest ja mal das probieren:
Delphi-Quellcode:
SendMessage(Listview.Handle, WM_VSCROLL, SB_BOTTOM, 0);
Edit: ich mach das immer im OnChange

BlueStarHH 26. Okt 2006 11:04

Re: In ListView zum letzten Item scrollen
 
Danke, mit FormActivate klappt es. Aber nur wenn die ListView auch in FormActivate befüllt wird. Wird sie in OnCreate befüllt klappt es nicht.

BlueStarHH 26. Okt 2006 11:07

Re: In ListView zum letzten Item scrollen
 
Zitat:

Zitat von Gollum
Hallo,

mal eben dumm gefragt: sind in der Liste überhaupt Einträge vorhanden?
Ich habe gerade den geposteten Beispielcode in der OnCreate ausprobiert. Bei mir macht die Liste das erwartete.

Vom Code her sind die Einträge in der ListView. Count gibt auch eine Zahl größer 0 zurück. Es könnte aber sein, dass die Einträge doch noch nicht enthalten sind. Verursacht z.B. durch das XP-Manifest. Ich hab ListView.HandleNeeded probiert. Das hat aber auch keinen Effekt.

hoika 26. Okt 2006 12:25

Re: In ListView zum letzten Item scrollen
 
Hallo,

> Danke, mit FormActivate klappt es. Aber nur wenn die ListView auch in FormActivate befüllt wird. Wird
> sie in OnCreate befüllt klappt es nicht.

dann machst du irgendwas verkehrt.
Das XP-Manifest verhindert doch sowas nicht.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 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