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 TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start (https://www.delphipraxis.net/194656-tgesturemanager-mehrere-formulare-damit-verknuepft-exception-beim-start.html)

Alex_ITA01 18. Dez 2017 13:40

TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich würde gerne in meinem Programm 1x TGestureManager an zentraler Stelle verwenden und alle Formulare sind mit diesem verknüpft.

Ich hab ein Beispiel angehangen um ganz einfach darzustellen was ich machen möchte.
Gegeben ist ein Hauptformular (Unit1), welches dynamisch andere Formulare erzeugt und deswegen die anderen Unit-Namen im Interface-uses Teil stehen.
Unit2 ist nur ein Containerformular, wo mein GestureManager liegt.
Unit2 macht sonst gar nichts.
Formular 3 wird von Formular 1 zur Laufzeit erstellt und hat den GestureManager aus Unit2 verknüpft.
Formular2 wird immer VOR dem erstellen des Formulars3 erstellt und somit sollte Formular3 auch auf den GestureManager aus Formular2 zugreifen können.
Ich hoffe ihr könnt erstmal nachvollziehen was ich machen möchte. Bitte nicht über Sinn und Zweck diskutieren, da mein konkreter Anwendungsfall viel komplexer ist aber ich es auf dieses Minimum runter gebrochen habe.

Das Problem ist, dass ich in Formular 3 den GestureManager aus Formular 2 im Objektinspektor verknüpfen kann (da die Unit2 im Interface-Abschnitt der Unit3 steht) aber sobald ich den Button1 klicke und NUR das versteckte Formular mit dem GestureManager erstellen möchte, kommt schon eine Exception.
Habt ihr eine Idee warum oder brauche ich wirklich für jedes Formular ein eigenen GestureManager? Das wollte ich eigentlich nicht und war der ganze Hintergedanke bei der Sache.


---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EListError mit der Meldung 'Eintrag nicht gefunden' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Wie würdet ihr das lösen?

PS: Selbst wenn man alles mit Unit3/Formular3 entfernt aus Unit1, wird die Exception geworfen beim Klick auf Button1.
Das heißt das dynamische Erzeugen eines Formulars mit einem GestureManager geht gar nicht...

Uwe Raabe 18. Dez 2017 13:52

AW: TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start
 
Ich habe auch schon die Erfahrung gemacht, daß pro Form ein separater GestureManager benötigt wird. Den Grund kenne ich auch nicht wirklich.

Weiterhin scheint es manchmal zu Exceptions zu kommen, wenn man bei laufendem Programm die Bildschirmauflösung ändert. So richtig reproduzierbar habe ich das aber auch noch nicht hinbekommen.

Alex_ITA01 18. Dez 2017 14:12

AW: TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start
 
Also wenn man wirklich pro Formular ein GestureManager braucht, wäre das doch mehr als blöd oder?
Und das bei einer Entwicklungsumgebung die so viel Wert auf mobile Entwicklung legt.
Wenn ich 50 Formulare habe die alle auf links und rechts Wischen reagieren sollen, will ich das doch an einer zentralen Stelle festlegen und nicht 50 mal... :evil:

Alex_ITA01 18. Dez 2017 14:40

AW: TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start
 
Ohje, es scheint wirklich so zu sein...
Auszug aus der Hilfe:

Verwenden von Gesten in AnwendungenAus RAD Studio
Nach oben zu So erstellen Sie eine Anwendung mit Gesten-Komponenten

3. Sie müssen jeder Komponente, die Gesten verarbeiten soll, einen Gestenmanager zuweisen:

Quelle: Verwenden_von_Gesten_in_Anwendungen.htm

Sorry aber das ist doch sehr unkomfortabel oder?

himitsu 18. Dez 2017 14:47

AW: TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start
 
Du köntest dir einen GestenManager ableiten, der z.B. auf Application.MainForm nach einem "globalen" GestenManager sucht und sich beim Laden der Form/DFM, bzw. beim manuellen Create, von dort die globalen Gesten besorgt/kopiert.

Uwe Raabe 18. Dez 2017 14:50

AW: TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start
 
Zitat:

Zitat von Alex_ITA01 (Beitrag 1389199)
3. Sie müssen jeder Komponente, die Gesten verarbeiten soll, einen Gestenmanager zuweisen:

Das heißt ja nicht, daß das nicht immer derselbe sein kann. Er muss nur auf demselben Form liegen.

Ich habe das so gelöst, daß ich ein zentrales Form mit einem GestureManager habe, von dem dann alle anderen Forms abgeleitet sind. Dort kann man auch die gemeinsamen Gesten bereits verdrahten. Formvererbung ist ja auch in anderen Fällen genau dafür gedacht, um gemeinsamen Verhalten bzw. Aussehen von Forms zu zentralisieren.

Die einzelnen Gesten und Aktionen werden für jedes Control separat im GestureManager gespeichert und somit auch von dem in die DFM gestreamt. Beim Lesen aus der DFM kommt dann ein Fehler, wenn die Controls nicht gefunden werden. Deswegen müssen die Controls existieren bevor das Streaming aus der DFM losgehen kann. Das geht natürlich nicht, wenn der GestureManager z.B. auf einem Datenmodul liegt, das vor allen anderen Forms erzeugt wird.

Uwe Raabe 18. Dez 2017 14:53

AW: TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start
 
Zitat:

Zitat von himitsu (Beitrag 1389200)
Du köntest dir einen GestenManager ableiten, der z.B. auf Application.MainForm nach einem "globalen" GestenManager sucht und sich beim Laden der Form/DFM, bzw. beim manuellen Create, von dort die globalen Gesten besorgt/kopiert.

Es gibt keine globalen Gesten. Eine Geste ist immer an ein Control gebunden. Selbst wenn zwei Controls die gleiche Geste verwenden, werden beide separat für jedes Control im GestureManager verwaltet. Hier bietet sich insbesondere die Verwendung von Actions an, die ja zur Designzeit direkt mit den Gesten verknüpft werden können.

himitsu 18. Dez 2017 15:22

AW: TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1389202)
Es gibt keine globalen Gesten.

Gesten die der Entwickler/TE als Global ansieht. :angel:

Zitat:

Zitat von Alex_ITA01 (Beitrag 1389194)
Also wenn man wirklich pro Formular ein GestureManager braucht, wäre das doch mehr als blöd oder?
Und das bei einer Entwicklungsumgebung die so viel Wert auf mobile Entwicklung legt.
Wenn ich 50 Formulare habe die alle auf links und rechts Wischen reagieren sollen, will ich das doch an einer zentralen Stelle festlegen und nicht 50 mal... :evil:

Einmal im GestureManager auf der MainForm und die TMeinGestenManager auf seinen anderen 50 Forms kopieren die Einstellungen von dort.

Oder einmal einen GestureManager enstellen und dann per Copy&Paste auf jede andere Form drauf. (hoffen alles wird mitgenommen und bei Änderungen überall neu draufkopieren)

Alex_ITA01 18. Dez 2017 20:36

AW: TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start
 
Ok danke für eure Hinweise.
Also den GestureManager von Formular zu Formular kopieren geht natürlich aber ich muss in jedem Formular im Objektinspektor unter Touch den GestureManager verknüpfen und auch die Gestures definieren (z.B. Links nach Rechts sowie Rechts nach Links).
Leider also nicht nur Copy&Paste.
Ich habe auch festgestellt, dass auf einem PageControl mit mehreren Tabs und relativ vielen Komponenten auf jedem Tab, ein hinzugefügter GestureManager dazu führt, dass das "Show" des Fenster (mit dem PageControl) sehr viel länger dauert, wie das gleiche Formular nur ohne den GestureManager. Wahrscheinlich aufgrund des Streamens der Komponenten oder?


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