![]() |
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 |
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:
Mehr habe ich bisher nicht gebraucht...
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; |
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). |
AW: Gesture - Probleme
Zitat:
|
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.
|
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? |
AW: Gesture - Probleme
Zitat:
|
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