AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start
Thema durchsuchen
Ansicht
Themen-Optionen

TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start

Ein Thema von Alex_ITA01 · begonnen am 18. Dez 2017 · letzter Beitrag vom 18. Dez 2017
Antwort Antwort
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

TGestureManager, mehrere Formulare damit verknüpft, Exception beim Start

  Alt 18. Dez 2017, 14:40
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...
Angehängte Dateien
Dateityp: zip Gesture.zip (5,9 KB, 0x aufgerufen)
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 18. Dez 2017, 14:52
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 18. Dez 2017, 15:12
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...
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 18. Dez 2017, 15:40
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?
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 18. Dez 2017, 15:47
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 18. Dez 2017, 15:50
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
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 18. Dez 2017, 15:53
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 18. Dez 2017, 16:22
Es gibt keine globalen Gesten.
Gesten die der Entwickler/TE als Global ansieht.

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...
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (18. Dez 2017 um 16:25 Uhr)
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 18. Dez 2017, 21:36
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?
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:25 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