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/)
-   -   Gesture - Probleme (https://www.delphipraxis.net/186043-gesture-probleme.html)

Kraisel 29. Jul 2015 18:53

Gesture - Probleme
 
Hallo,

Problem 1:
Wenn ich meine FMX-Anwendung unter WIN 8.1 beende, erhalte ich MemoryLeaks (ReportMemoryLeaksOnShutDown = True), wenn ich das Programm vorher per Touch bedient (z.B. gescollt) habe. Wenn nicht, oder nur per Maus bedient, beendet das Program einwandfrei. Egal, ob mit oder ohne GestureManager. Sowohl in XE7 als auch in XE8.

Problem 2:
Wenn ich eine Standard-Geste einschalte (InteractiveGestures = []), erhalte ich folgende Fehlermeldung: "Fehler beim Lesen von TGestureStreamData.Control: Zugriffsverletzung bei Adresse 500D4ED00 in Modul 'rtl220.bpl'. Lesen von Adresse 00000008." Wenn ich rechts neben der CheckBox für die Geste klicke, erscheint: "Sie können die Eigenschaft nicht setzen..."

Frage 1:
Reicht je Anwendung EIN GestureManager oder muss er je Form oder sogar je TouchControl vorhanden sein?

Frage 2:
Wann erkennt und bearbeitet die Anwendung automatisch interaktive Gesten (z.B. Verschieben, scrollen usw.). Sind dies bestimmte Komponenten oder wie ist das organisiert. Meine eigene Graphik muss ich natürlich selber in OnGesture bearbeiten. Das ist mir klar, und funktioniert auch.

Frage 3:
Wann brauchen interaktive Gesten den GestureManager und wann nicht ?

Frage 4:
Gibt es irgendwo bessere Hintergrundinfos, die deutlich über die Standard Emba-Hilfe hinausgehen? Oder habe ich etwas übersehen?

Vielen Dank im Voraus

Mavarik 29. Jul 2015 19:02

AW: Gesture - Probleme
 
Also...

Ich habe bisher noch keinen GestenManager gebraucht...

Ich setzt die InteractiveGesture z.B. Zoom auf true und belege OnGesture

Und dann sowas...

Delphi-Quellcode:
  if EventInfo.GestureID = igiZoom then
    begin
      if not(TInteractiveGestureFlag.gfBegin in EventInfo.Flags) and not(TInteractiveGestureFlag.gfEnd in EventInfo.Flags) then
        begin
          Direction := EventInfo.Distance/FLastDIstance;
          LScale := ZoomPanel.Scale.X * Direction;
          if LScale < 1 then
            LScale := 1;

          ZoomPanel.Scale.X := LScale;
          ZoomPanel.Scale.Y := LScale;

          ZoomPanel.Width := ZoomWidth * LScale;
          ZoomPanel.Height := ZoomHeight * LScale;
        end;
      FLastDIstance := EventInfo.Distance;
    end;
Mehr habe ich bisher nicht gebraucht...

Der schöne Günther 29. Jul 2015 19:14

AW: Gesture - Probleme
 
Ich kann ehrlich gesagt nur für die VCL antworten. Es kann sein dass es da völlig anders ist, oder ein- und dasselbe. Ich weiß es nicht.

Den TGestureManager brauchst du nicht für interaktive Gesten. Interaktive Gesten sind "Pinch to zoom", Scrollen mit dem Finger, all das. Der TGestureManager ist "Wir wedeln mit dem Finger herum und schauen am Schluss, ob es eine bestimmte Form hatte". Beispielsweise ein "Z". Dafür kann man den nehmen. In der VCL schloss sich das (glaube ich) sogar aus- Entweder TGestureManager oder interaktive Gesten. Kann mich aber auch irren.

Eine weitere spaßige Eingenschaft des TGestureManagers sind die Speicherlecks: Delphi speichert ja gerne den Inhalt eines Frames redundant in der DFM seines Parents ab. Wenn dort der TGestureManager redundant wieder aufgeführt wird passt irgendwas nicht mehr und es gibt Speicherlecks beim Beenden. War nur beim TGestureManager so. Keine Ahnung warum und ob das bei FireMonkey noch gilt. Wahrscheinlich schon.

Mit der Embarcadero-Hilfe zu Touch kam ich ehrlich gesagt auch nicht zurecht. Den TGestureManager zu missverstehen machen anscheinend viele (mich eingeschlossen).

Mavarik 29. Jul 2015 19:18

AW: Gesture - Probleme
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1310218)
Der TGestureManager ist "Wir wedeln mit dem Finger herum und schauen am Schluss, ob es eine bestimmte Form hatte". Beispielsweise ein "Z".

Kann der nicht auch lernen... Glaube schon... Nach dem Motto... Die Wedelei von gerade soll XY auslösen...

Der schöne Günther 29. Jul 2015 19:31

AW: Gesture - Probleme
 
Ja, eigene Gesten konnte man damit sogar erstaunlich gut definieren. Dagegen will ich ja auch nichts sagen, ich kann mir nur absolut kein Anwendungsgebiet dafür vorstellen.

Kraisel 29. Jul 2015 20:39

AW: Gesture - Probleme
 
OK, danke, auch ohne GestureManager funktionieren meine interaktiven Gesten. Das hatte ich nie probiert. Aber ich erhalte immer noch MemoryLeaks, z.B. beim Zoom oder Pan.

Der Code von Frank reicht nicht, wenn man will, dass das Design komplett neu gebaut werden soll bzw. muss (und eben nicht NUR per Faktor gezoomt wird), und er reicht auch nicht, wenn man will, dass die Vergrößerung nicht oben links beginnt, sondern so Verschoben werden soll, dass der sichtbare Bereich zwischen den Fingern auch dort bleibt. Quasi, dass alles nach außen vom Mittelpunkt der Finger vergrößert / verkleinert wird. Dazu muss man auch noch verschieben und evtl. auch den sichtbaren Teil des Controls entsprechend anpassen. UND dann siehts deutlich besser aus, wird aber leider auch komplizierter.

In meinem GestureSimulator, den ich in meinem eigenen TcUserEventHandler implementiert habe, funktioniert das alles per Tastatur/Maus einwandfrei, aber mit einem echten Touch habe ich noch ein paar Probleme, die ohne das Wissen der Internas der Gesten noch schwerer nachzuvollziehen sind. Ich werde wohl weiter experimentieren.

Es bleibt aber die Frage, wieso ich die Standard-Gesten nicht einschalten kann?

Mavarik 29. Jul 2015 21:45

AW: Gesture - Probleme
 
Zitat:

Zitat von Kraisel (Beitrag 1310226)
Der Code von Frank reicht nicht, wenn man will, dass das Design komplett neu gebaut werden soll bzw. muss (und eben nicht NUR per Faktor gezoomt wird), und er reicht auch nicht, wenn man will, dass die Vergrößerung nicht oben links beginnt, sondern so Verschoben werden soll, dass der sichtbare Bereich zwischen den Fingern auch dort bleibt. Quasi, dass alles nach außen vom Mittelpunkt der Finger vergrößert / verkleinert wird. Dazu muss man auch noch verschieben und evtl. auch den sichtbaren Teil des Controls entsprechend anpassen. UND dann siehts deutlich besser aus, wird aber leider auch komplizierter.

Hatte ich, aber in diesem speziellen Fall machte es keinen Sinn...

Kraisel 29. Jul 2015 22:23

AW: Gesture - Probleme
 
OK, dann bleibt zunächst nur noch die Frage, wieso ich die Standardgesten NICHT einschalten kann. Siehe Problem 2 in dieser Threaderöffnung. Hat jemand eine Idee?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz