Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi FMX : onTap vorherigen Eintrag selektiert (https://www.delphipraxis.net/203253-fmx-ontap-vorherigen-eintrag-selektiert.html)

stalkingwolf 28. Jan 2020 14:22

FMX : onTap vorherigen Eintrag selektiert
 
Mir ist gerade aufgefallen, das wenn man auf TListView onTap nur kurz draufdrückt in itemindex noch der letzte Eintrag enthalten ist.
D.h man muss schon etwas länger draufdrücken bis man sieht das optisch die Zeile auch markiert ist.

Ist das so gewollt oder mache ich hier in der Abfrage etwas falsch?

Code:
procedure Tfmain.lvbilderTap(Sender: TObject; const Point: TPointF);
{$IF DEFINED(ANDROID)}
var fName      : String;
   Intent     : JIntent;
   URI        : Jnet_Uri;
{$ENDIF}
begin
    // Android auf TAP reagieren
    {$IF DEFINED(ANDROID)}
    if lvbilder.Selected <> nil then begin

        fname      := lvbilder.items[lvbilder.ItemIndex].detail;
        URI        := TJnet_Uri.JavaClass.parse(StringToJString('file:///' + fName));
ich habe mir auch einmal beides ausgeben lassen (addlog ist eine Funktion von mir )
Code:
addlog(format('<%d><%d>',[lvbilder.Selected.Index,lvbilder.ItemIndex]));
und in beiden steht 0 obwohl ich die zweite Zeile angeklickt habe.

Ich öffne danach einen Bildbetrachter und wenn ich zurück zu meiner APP wechsle, ist die korrekte Zeile markiert.
D.h es gibt einen Delay zwischen onTap und dem echten markieren der Zeile.

himitsu 28. Jan 2020 14:57

AW: FMX : onTap vorherigen Eintrag selektiert
 
Zitat:

D.h es gibt einen Delay zwischen onTap und dem echten markieren der Zeile.
Oder OnTab wird ausgeführt bevor der Index gesetzt wird.
> Reihenfolgeproblem, nicht Zeitverzögerung, oder falsches Event benutzt

* beim Drücken wird erst das Event ausgeführt und danach der Code zum Setzen des Index (das könnte man aber als bestimmt Bug ansehen und melden, damit es in paar Jahren behoben wird)
* oder beim Draufdrücken das OnTab, aber der Index erst beim loslassen

stalkingwolf 28. Jan 2020 15:59

AW: FMX : onTap vorherigen Eintrag selektiert
 
Irgendwie habe ich auch den Eindruck es fühlt sich nicht sauber an.
z.b sind die Animationen verschieden.

Mal erscheint eine Animation für das drücken des Fingers, mal nicht.
als wäre etwas mit den Gestures nicht korrekt.

Ich hatte vorher auf LongTap eine Löschfunktion.
Diese habe ich nun auf canswipetodelete gelegt und auf LongTap auch das öffnen von dem Eintrag gelegt.
So kann ich den Anwender wenigstens sagen "halt lange Finger drauf = geht Bild auf".

himitsu 28. Jan 2020 16:52

AW: FMX : onTap vorherigen Eintrag selektiert
 
Solche Inkonsistenzen gibt es überall, auch schon seit vielen vielen sehr vielen Jahren in der alten VCL, bzw. teilweise bereits im eigentlichen Control des Windows.

Teilweise reagieren Tastendrückenaktionen im KeyDown/MouseDown und wo anders im KeyUp/MouseUp.
Eigentlich reagieren Buttons auf MouseUp und nur wenn dann der Zeiger noch über dem Button liegt,
aber dann kommen die SpeedButtons und Button-Komponenten von Fremdherstellern (z.B. DevExpress) haben auch mal ihr eigenes Verhalten.
Teilweise reagieren Komponenten auch noch unterschiedlich auf "Buchstaben" oder Enter/ESC ... Eines im KeyDown und das Andere im KeyUp.
usw.


Ich hatte mal den Spaß, dass ein Fenster mit F2 auf ging und weil es "einfach" zu merken war, konnte man das Fenster mit F2 auch wieder "mit Übernahme der Default-Auswahl, egal was wohin der Nutzer schon gescrollt hat" schließen. (oder ESC und Enter mit anderer Auswahl)
Fenster auf im KeyUp (ging bisher immer problemlos) und das neue Default-Schließen aber im KeyDown (weil dort schon alle anderen Tastenaktionen dieser Form lagen),
woraufhin das Fenster sofort wieder auf ging, wenn man schnell die Defaultauswahl übernahm. :wall:

stalkingwolf 29. Jan 2020 12:49

AW: FMX : onTap vorherigen Eintrag selektiert
 
ja leider ein Problem seit vielen Jahren.

Ich habe nun in onTap mir von
Code:
const Point: TPointF
den Itemindex besorgt.
hier im Forum war auch mal ein Thread dazu. habe ich dann über die Google Suche gefunden :-)

weil onlongTap hat teilweise auch nicht funktioniert, weil die Listview darauf gar nicht mehr reagiert hat.
D.h erster LongTap hat die Zeile markiert, die Animation ausgeführt und das Event ausgelöst onGesture
Ich öffne darin das Bild per TAndroidHelper.Activity.startActivity(). Wenn ich dann aus dem Bildbetrachter zurückkomme und die nächste Zeile anklicke, reagiert das Listview nicht. Keine Animation, kein Event, gar nichts. Ich muss erst in die APP drücken ( z.b freien Bereich ) und danach per LongTap wieder auf das Listview. Leider nicht zu 100% reproduzierbar aber in 7/10 Fällen.

Das APP wird nachher von Monteuren benutzt. Die machen die Tablets klein wenn das so funktioniert :lol:

Rollo62 29. Jan 2020 16:33

AW: FMX : onTap vorherigen Eintrag selektiert
 
Hast Du es mal mit OnClickEx probiert, statt OnTap ?

stalkingwolf 31. Jan 2020 07:19

AW: FMX : onTap vorherigen Eintrag selektiert
 
onclick hat das Problem das sofort der Eintrag ausgewählt wird und nicht mehr gescrollt werden kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.

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