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: Wenn Zeile nicht mehr sichtbar nach unten scrollen (https://www.delphipraxis.net/36543-listview-wenn-zeile-nicht-mehr-sichtbar-nach-unten-scrollen.html)

Helmi 21. Dez 2004 14:48


ListView: Wenn Zeile nicht mehr sichtbar nach unten scrollen
 
Hallo,

ich habe eine ListView mit mehr Zeilen als momentan sichtbar (also die vertikale Scrollbar ist sichtbar).

in einer Schleife wird nacheinander die Zeilen abgearbeitet und zum Schluss in die letzte Spalte jeder Zeile ein Text eingetragen.

So weit so gut - das ist noch nicht das Problem.

Wenn die Zeilen abgearbeitet werden, die nicht mehr sichtbar sind, dann sieht man den eingetragenen Text nicht mehr.

Wie kann ich die ListView "bedingt" nach unten scrollen, damit immer die aktuelle Zeile sichtbar ist?

Als Scroll-Code hab ich folgenden Code:
Code:
  ListView_Dateien.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
Wann weiss ich, wenn eine Zeile nicht mehr sichtbar ist, damit ich runterscrollen kann?
Oder hat jemand eine andere, vielleicht bessere Lösung?

mfg
Helmi

[edit] Ich vergaß zu erwähnen, dass

Code:
  ListView_Dateien.SortType := stText;
  ListView_Dateien.ViewStyle := vsReport;
ist.

[/edit]

Luckie 21. Dez 2004 14:53

Re: ListView: Wenn Zeile nicht mehr sichtbar nach unten scro
 
Sollte besser gehen mit MSDN-Library durchsuchenLVM_ENSUREVISIBLE.

Helmi 21. Dez 2004 15:01

Re: ListView: Wenn Zeile nicht mehr sichtbar nach unten scro
 
Hallo Luckie,

danke für deinen Tip :hello:

Ich hab das jetzt mal so gelöst:

Code:
SendMessage(ListView_Dateien.Handle, LVM_ENSUREVISIBLE, Line, 0);
//Line ist die aktuelle Zeile
Wenn also jetzt eine Zeile kommt, die nicht sichtbar ist, dann wird eben um eine Zeile nach oben gescrollt, damit die aktuelle Zeile sichtbar ist.

Nur der letzte Parameter ist mir unklar.
Diesen kann ich auf 1 oder auf 0 setzen, aber er macht immer das gleiche. Was mich jetzt zwar nicht wirklich stört, da er ja immer das Richtige tut, aber interessieren würds mich schon, was dieser Parameter macht.

Hier mal die Microsoft-Erklärung:
Zitat:

Syntax


To send this message, call the SendMessage function as follows.
lResult = SendMessage( // returns LRESULT in lResult (HWND) hWndControl, // handle to destination control (UINT) LVM_ENSUREVISIBLE, // message ID (WPARAM) wParam, // = (WPARAM) (int) i; (LPARAM) lParam // = (LPARAM) (BOOL) fPartialOK; );
Parameters

i
Index of the list-view item.
fPartialOK
Value specifying whether the item must be entirely visible. If this parameter is TRUE, no scrolling occurs if the item is at least partially visible.
Return Value

Returns TRUE if successful, or FALSE otherwise.
mfg
Helmi

Helmi 21. Dez 2004 15:10

Re: ListView: Wenn Zeile nicht mehr sichtbar nach unten scro
 
das hat sich erledigt :-D

ich hab mal Google befragt was das heisst und Google sagte mir, wenn dieser Parameter auf 0 ist, dann wird gescrollt auch wenn die Zeile halb sichtbar ist, bei 1 wird nicht mehr gescrollt, wenn die Zeile halb sichtbar ist.

Trotzdem Danke

:party:

Sprint 21. Dez 2004 15:13

Re: ListView: Wenn Zeile nicht mehr sichtbar nach unten scro
 
Warum benutzt ihr nicht direkt die VCL?

Letzten Eintrag im TListView sichtbar machen:
Delphi-Quellcode:
  with ListView1 do
    Items[Items.Count - 1].MakeVisible(True);

Luckie 21. Dez 2004 15:23

Re: ListView: Wenn Zeile nicht mehr sichtbar nach unten scro
 
Zitat:

Zitat von Sprint
Warum benutzt ihr nicht direkt die VCL?

Wie banal, das ist ja langweilig. :roll: :mrgreen:

Nein, ich kannte die Methode nicht und habe es deswegen per WinAPI gelöst.

Helmi 21. Dez 2004 15:24

Re: ListView: Wenn Zeile nicht mehr sichtbar nach unten scro
 
Danke Sprint.

Dein Code geht auch.

Aber auf mein Problem hin hab ich ihn so geändert:

Code:
with ListView1 do
    Items[Line].MakeVisible(True);
Wobei "Line" die aktuelle Zeile ist.

So springt er auch eine Zeile runter und zeigt mir die aktuelle Zeile an.

mfg
Helmi


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