AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

[FM] Scrollbox mit Eingabeelementen scrollen

Ein Thema von quaero · begonnen am 25. Nov 2015 · letzter Beitrag vom 30. Nov 2015
Antwort Antwort
quaero

Registriert seit: 25. Apr 2013
38 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

[FM] Scrollbox mit Eingabeelementen scrollen

  Alt 25. Nov 2015, 10:44
Hallo,

ich habe eine VertScrollbox mit verschiedenen Elementen, die auf OnClick reagieren (Button, Edit, Memo). Diese Elemente passen nicht immer auf den verfügbaren Platz, so dass gescrollt werden muss. Wenn ich nun scrollen möchte und dabei ein Element erwische, dass auf OnClick reagiert, so kann ich nicht mehr scrollen und das OnClick-Ereignis wird ausgelöst. Ich muss also einen Fleck in der Scrollbox erwischen, der nicht reagiert.
Ich hätte aber gern, dass Scrollgesten immer als Scroll interpretiert werden und nur reine Clicks als Click. Dafür habe ich testweise mal das OnClick-Ereignis beim Button entfernt, MouseDown und -Up für Scrollbox so implementiert, dass geprüft wird, ob beide nur minimal voneinander abweichen. Dann habe ich geschaut, ob sich der Button an dieser Stelle befindet um dessen OnClick-Funktion aufzurufen. Das geht natürlich nicht, da der Knopf ja immer noch auf das OnClick-Ereignis reagiert.
Wie kann ich sonst umsetzen, dass Nutzer auf vollgestopften Scrollboxen einfach scrollen können, aber die Click-Elemente auf Click erreichbar bleiben?

Oder ist mein Ansatz mit der VertScrollBox schon verkehrt? Gibt es genau für den Zweck andere Komponenten in Delphi Seattle?
quaero
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: [FM] Scrollbox mit Eingabeelementen scrollen

  Alt 25. Nov 2015, 11:27
Gleich vorweg: Mit FMX-Programmierung hab ich bislang nix am Hut, aber ich hab seit einigen Monaten ein Smartphone, und da gibt es ebenfalls Scrollboxen, die so mit Buttons vollgestopft sind, daß gar kein Platz bleibt für Scrollboxen oder Zwischenräume. Das Scrollen funktioniert dabei so, daß ich den Finger, der das Scrollen auslöst, schon in Bewegung haben muß, bevor er die Scheibe berührt, ansonsten wird nicht gescrollt, sondern das Ereignis des berührten Buttons ausgelöst. Offenbar gibt es da eine gewisse klitzekleine Zeitspanne, die abgewartet wird, ob der Finger weiterhin an der gedrückten Position verbleibt. Vielleicht hilft dir das weiter?
  Mit Zitat antworten Zitat
quaero

Registriert seit: 25. Apr 2013
38 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: [FM] Scrollbox mit Eingabeelementen scrollen

  Alt 25. Nov 2015, 12:42
Ja, das ist genau das Verhalten, dass ich auch erwarte. Ich habe es gerade nochmal getestet: Bei Buttons funktioniert es doch, aber Edits und Memos lassen die Tastatur aufklappen und das war's.
quaero
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: [FM] Scrollbox mit Eingabeelementen scrollen

  Alt 25. Nov 2015, 13:39
Scrollboxen mit Edits und Memos hab ich bislang noch in keiner App gesehen, aber das will nichts heißen, ich kenne ja nicht alle Apps. Aber vielleicht solltest du dein App-Konzept nochmal überdenken und Edit-Komponenten in einer eigenen Form unterbringen, die Platz genug bietet, um bei Bedarf auch scrollen zu können. Oder du fügst ein Panel ein, das die verfügbare Breite in der Scrollbox verringert, so daß man auf dem Panel scrollen bzw. die entsprechende Gestik ausführen kann. Vielleicht findet sich ja auch noch ein hilfsbereiter User, der sich mit FMX-Programmierung auskennt (ich hab hier nur D2009).
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.173 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: [FM] Scrollbox mit Eingabeelementen scrollen

  Alt 25. Nov 2015, 13:42
Scrollboxen mit Edits und Memos hab ich bislang noch in keiner App gesehen
Aber hallo, das ist nicht häufig, aber doch ganz normal.

Konstruktiv zu FireMonkey kann ich auch nichts beitragen, noch zu wenig Erfahrung. In der VCL hieß es irgendwas mit "PassThrough" meine ich...
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
745 Beiträge
 
#6

AW: [FM] Scrollbox mit Eingabeelementen scrollen

  Alt 25. Nov 2015, 14:23
Ich weiß nicht, ob dir das hier hilft, aber ich hatte ein ähnliches Problem mit einer ListBox: Beim Scrollen wurde manchmal zusätzlich zum Scrollen das OnClick des ListBoxItems ausgelöst.

Ich habe das dann folgendermaßen gelöst:

- eine Variable/Feld deklariert: FScrollMode: Boolean;
- bei onMouseDown: FScrollMode := False;
- bei ViewportChange / Scroll: FScrollMode := True;
- bei OnClick (des ListBoxItems): if FScrollMode then EXIT;
  Mit Zitat antworten Zitat
quaero

Registriert seit: 25. Apr 2013
38 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: [FM] Scrollbox mit Eingabeelementen scrollen

  Alt 25. Nov 2015, 15:42
Ja, das scheint zu funktionieren. MouseMove der Komponente abfangen und auf Scrollbox umleiten. Ich probiere noch ein bisschen damit rum und melde mich demnächst nochmal.
quaero
  Mit Zitat antworten Zitat
quaero

Registriert seit: 25. Apr 2013
38 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: [FM] Scrollbox mit Eingabeelementen scrollen

  Alt 30. Nov 2015, 14:38
Bei den Controls kann man über die Eigenschaft Touch->InteractiveGestures->Pan festlegen, welche Controls auf das Ziehen reagieren sollen. Wenn ich die Eigenschaft bei der Scrollbox auf True setze, bei den Elementen innerhalb der Scrollbox aber auf False, dann wird der Event von den Controls schrittweise an Parent weitergereicht, bis eines entsprechend reagiert. Damit konnte ich bei Buttons, Edit und Combobox scrollen. Bei Memo hat das leider nichts gebracht.
Ich habe allerdings noch eine horizontale Scrollbox mit Bildern in meiner vertikalen Scrollbox. Hier wollte ich, dass sich horizontale Bewegungen auf die horizontale Scrollbox und vertikale Bewegungen auf die vertikale Scrollbox auswirken. Mit Aktivierung der Pan-Eigenschaft für die horiz. Scrollbox kamen vertikale Bewegungen aber nicht mehr bei der vert. Scrollbox an. Die einzige Möglichkeit, beide Boxen zu scrollen, bestand darin, die Pan-Eigenschaft bei beiden abzuschalten und sämtliche Scrollbewegungen über einen GestureManager auf der Form abzufangen. Zu Beginn der Scrollbewegung wird geschaut, ob sich die horiz. Scrollbox an der Position befindet. Bei jeder Scrollbewegung berechne ich Veränderungen auf der X- und Y-Achse. Y-Veränderungen werden an die vert. Scrollbox weitergegeben (VertScrollBox.ScrollBy(0, dy)) und horiz. Bewegungen an die horiz. Scrollbox, falls die Geste über dieser begann.
Momentan habe ich auf Android noch das Problem, dass bei Scrollen über z.B. einem Label der Inhalt der vert. Scrollbox springt. Unter iOS habe ich noch nicht getestet. Falls jemand eine Erklärung für das Verhalten hat, dann soll er das bitte kundtun. Mir fehlt momentan ein Ansatz.
quaero
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15: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