Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Listview scrollen iOs (https://www.delphipraxis.net/177120-listview-scrollen-ios.html)

eddie11 17. Okt 2013 15:59

Listview scrollen iOs
 
Hi allerseits,

Wenn ich ein Listview mit mehr Items fülle als auf dem Schirm angezeigt werden können, dann kann ich ja mit Wischen den anzuzeigenden Bereich verschieben. Das ist soweit klar.
Wenn ich jetzt am Ende aller Items angekommen bin, dann verschiebt sich das ganze Listview kurz nach oben und flippt dann wieder nach unten. Mieine Frage: kann ich irgendwie auf dieses "am Ende ankommen" reagieren? Ich habe kein entsprechendes Event gefunden.

Der Hintergrund ist folgender: ich möchte das Listview mit Daten aus einer Datenbank füllen. Es handelt sich dabei um mitunter mehrere 10tausend Datensätze. Wenn ich jetzt das Listview sofort mit allen Daten fülle, dann dauert das zu lange. Ich möchte also nur z.B. 50 Items füllen, und dann, wenn der User am Ende des Listwievs angekommen ist, sollen weitere 50 Sätze angehängt werden usw...
Die einfachste Methode ist, das letzte Item mit dem Text "weiter..." zu versehen und den User darauf klicken zu lassen um weitere Datensätze zu lesen. Das finde ich allerdings nicht so elegant, besse wäre es, wenn der User davon nix mitkriegen würde, sonder alles "von selbst" geht.

Hat da jemand einen Tip für mich ?

RWarnecke 17. Okt 2013 18:53

AW: Listview scrollen iOs
 
Das könnte vielleicht was für Dich sein http://docwiki.embarcadero.com/Libra....ScrollViewPos

Mavarik 17. Okt 2013 20:15

AW: Listview scrollen iOs
 
Ich hab das so gelößt:

Delphi-Quellcode:
procedure TGenKBII.ViewPortChange(Sender: TObject;const OldViewportPosition, NewViewportPosition: TPointF;const ContentSizeChanged: Boolean);
begin
  if not(FlipScroll) then
    exit;

  if MDown
    then begin
           if NewViewPortPosition.Y > OldViewPortPosition.Y
            then Runter := true
            else Runter := false;
           DoPage := false;
         end
    else begin
           if (NewViewPortPosition.Y < OldViewPortPosition.Y) and runter and not(DoPage)
             then begin
                    if Seiten.ItemIndex < Seiten.Count then
                      begin
                        Seiten.ItemIndex := Seiten.ItemIndex + 1;
                        DoPage := true;
                      end;
                  end
             else if (NewViewPortPosition.Y > OldViewPortPosition.Y) and not(runter) and not(DoPage) then
                    if Seiten.ItemIndex > 0 then
                      begin
                        Seiten.ItemIndex := Seiten.ItemIndex - 1;
                        DoPage := true;
                      end;
         end;
end;
Mavarik

eddie11 18. Okt 2013 07:05

AW: Listview scrollen iOs
 
Zitat:

Zitat von RWarnecke (Beitrag 1232343)
Das könnte vielleicht was für Dich sein http://docwiki.embarcadero.com/Libra....ScrollViewPos

Danke, aber Scrollviewpos gibt mir die obere Position des Scrollbalkens an. Was ich bräuchte wäre ja die untere Position.

eddie11 18. Okt 2013 07:07

AW: Listview scrollen iOs
 
Zitat:

Zitat von Mavarik (Beitrag 1232359)
Ich hab das so gelößt:

Delphi-Quellcode:
procedure TGenKBII.ViewPortChange(Sender: TObject;const OldViewportPosition, NewViewportPosition: TPointF;const ContentSizeChanged: Boolean);
begin
  if not(FlipScroll) then
    exit;

  if MDown
    then begin
           if NewViewPortPosition.Y > OldViewPortPosition.Y
            then Runter := true
            else Runter := false;
           DoPage := false;
         end
    else begin
           if (NewViewPortPosition.Y < OldViewPortPosition.Y) and runter and not(DoPage)
             then begin
                    if Seiten.ItemIndex < Seiten.Count then
                      begin
                        Seiten.ItemIndex := Seiten.ItemIndex + 1;
                        DoPage := true;
                      end;
                  end
             else if (NewViewPortPosition.Y > OldViewPortPosition.Y) and not(runter) and not(DoPage) then
                    if Seiten.ItemIndex > 0 then
                      begin
                        Seiten.ItemIndex := Seiten.ItemIndex - 1;
                        DoPage := true;
                      end;
         end;
end;
Mavarik

Danke, aber das sagt mir leider garnichts - ich weiß nicht wie ich das zu interpretieren habe. Kannst Du das vielleicht erläutern?

eddie11 18. Okt 2013 07:56

AW: Listview scrollen iOs
 
ok, habs so gelöst:

Code:
procedure TForm1.Button77Click(Sender: TObject);
var i: integer;
    Scrollbar: TScrollBar;
begin
  for i := 0 to ListView1.ControlsCount-1 do begin
    if ListView1.Controls[i] is TScrollBar then begin
      Scrollbar := TScrollBar(ListView1.Controls[i]);
    end;
  end;
  if Scrollbar.Height+ListView1.ScrollViewPos=Scrollbar.ValueRange.Max then
    unten := true // hier muss dann was gemacht werden

end;
Der Hinweis von bezüglich "ScrollviewPos" hat den richtigen Anstoss gegeben, Danke


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