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 Listview mit on Click und LongTap (https://www.delphipraxis.net/213340-listview-mit-click-und-longtap.html)

fisipjm 13. Jul 2023 06:56

Listview mit on Click und LongTap
 
Hi,

ich schlage mich jetzt schon seit einiger zeit mit der Listview herum und bekomme einen, meiner auffassung nach, selbstverständlichen use case nicht abgebildet.

Es geht bei der Entwicklung ausschließlich um Mobile also android oder iOS
Ich möchte in der Listview sowohl mit einem einfachen tab auf das Item eine aktion ausführen (Öffnen des Datensatzes in neuer Form) sowie auch durch gedrückt halten, die Listview in den Editmodus umschalten. Beides getrennt, kein Problem, beides Zusammen bekomme ich einfach nicht hin.

Die beiden aktionen kommen sich immer gegenseitig in die Quere.
Hat das schon jemand von euch implementieren können?

Viele Güße
PJM

Olli73 13. Jul 2023 10:51

AW: Listview mit on Click und LongTap
 
So vielleicht?

Delphi-Quellcode:
procedure TForm1.ListViewMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
  if Button = TMouseButton.mbRight then
    //LongPress
  else
    //Tap/Click;

end;

fisipjm 13. Jul 2023 11:36

AW: Listview mit on Click und LongTap
 
Zitat:

Zitat von Olli73 (Beitrag 1524508)
So vielleicht?

Delphi-Quellcode:
procedure TForm1.ListViewMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
  if Button = TMouseButton.mbRight then
    //LongPress
  else
    //Tap/Click;

end;

Aus meiner Sicht völlig falscher Ansatz. Habs trotzdem versucht. Funktioniert leider nicht. Es gibt ein Ereignis
Delphi-Quellcode:
OnGesture
das für das Abfragen von allen möglichen Gesten zuständig ist. Da kann ich auch ein
Delphi-Quellcode:
EventInfo.GestureID = igiLongTap
abfragen.
Funktioniert genau so lange gut, bis ich das
Delphi-Quellcode:
OnItemClickEx
definiere. Das greift schon beim Tap und nicht erst beim Tap Ende und sperrt mir somit die
Delphi-Quellcode:
EventInfo.GestureID = igiLongTap
Abfrage.

Olli73 13. Jul 2023 11:52

AW: Listview mit on Click und LongTap
 
Die Gesten etc. musst du natürlich rausnehmen für meinen Ansatz, falls nicht geschehen.

Ein long tap auf einem Touchscreen kommt dann im Programm immer als Rechtsclick an...

fisipjm 13. Jul 2023 12:31

AW: Listview mit on Click und LongTap
 
Test es gerade mit Delphi 11.3 alle anderen Events sind von der Listview entfernt.
Folgender Code liegt auf MousUp

Delphi-Quellcode:
procedure TForm1.ListViewOverviewMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
  if Button = TMouseButton.mbRight then
    showmessage('Long')
    // LongPress
  else
    showmessage('Click');
end;
Ich bekomme ausschließlich das "Click" nie "Long".

shebang 13. Jul 2023 12:34

AW: Listview mit on Click und LongTap
 
Hilft dir dieser Link eventuell weiter?

fisipjm 13. Jul 2023 12:50

AW: Listview mit on Click und LongTap
 
Zitat:

Zitat von shebang (Beitrag 1524518)
Hilft dir dieser Link eventuell weiter?

Nein, LongTap ist aktiv.

!OffTopic! PressAndTap ist die unnötigste Geste von der ich jemals gehört habe. Nicht nur das ich das noch nie gesehen habe, mir fällt auch kein auch noch so konstruiertes Beispiel ein an dem die Geste hilfrecih wäre.

Olli73 13. Jul 2023 13:06

AW: Listview mit on Click und LongTap
 
Oder war das mit dem right click nur unter Windows? :gruebel:

himitsu 13. Jul 2023 16:30

AW: Listview mit on Click und LongTap
 
Zitat:

Zitat von Olli73 (Beitrag 1524513)
Ein long tap auf einem Touchscreen kommt dann im Programm immer als Rechtsclick an...

Nee, es kommt drauf an, wie es dort arbeitet.

Genauso könnte z.B. auch ein Zwei- oder Drei-Finger-Tipper als Rechtsklick (ContextMenü) interpretiert werden.

Rollo62 13. Jul 2023 16:38

AW: Listview mit on Click und LongTap
 
Ich habe da auch viel rumexperimentiert und verschiedene Ansätze dafür.
Mittlerweile mache ich das mit einem FTDateTimeStart := Now; im Mousedown und
mit MillisecondsBetween( Now, FTDateTimeStart ) > 2000 then
Im MouseUp.

Sorry, bin nicht am PC, kannst nicht schöner schreiben.

Das Problem kann sein dass ein LongTap auch immer ein OnClick auslöst,
Das kam man damit entsprechend verhindern.

Der Nachteil ist, dass ein Event erst bei MouseUp ausgelöst wird.

himitsu 13. Jul 2023 18:29

AW: Listview mit on Click und LongTap
 
OnMouseUp ist ja OK, da man ja erst beim Loslassen wissen kann, ob es kurz oder lang war.


Wo man etwas aufpassen muß, ist wann "Clicks" ausgelöst werden.
z.B.
* Leertaste oder Buchstabe/ShortCut auf Button -> KeyDown = Click
* Enter auf Button -> oftmals KeyUp = Click
* linke Maustaste auf Button -> MouseUp = Click
* linke Maustaste auf Button und Move außerhalb des Buttons -> MouseUp = kein Click

* und ansonsten reagieren verschiedene Komponenten gern unterschiedlich, also manchmal Aktion beim Down oder beim Up


Ich hatte mal den Fall, dass beim KeyUp (F2) ein Fenster auf ging
und dieses Fenster ebenfalls auf F2 reagierte, aber im KeyDown, um es mit der "Standard-Aktion" wieder zu schließen.
Geplant war also "zwei Mal die F2-Taste drücken (und loslassen) für Schnellauswahl"
* erstes Drücken+Loslassen des F2 = Auswahlfenster auf
* zweites Drücken+Loslassen des F2 = Fenster zu, aber sofort wieder auf, weil siehe "erstes Drücken+Loslassen" ... und nun die Endlosschleife

fisipjm 14. Jul 2023 10:52

AW: Listview mit on Click und LongTap
 
Liste der Anhänge anzeigen (Anzahl: 1)
Okay,

ich habe eine Lösung, aber diese Lösung ist so unverhältnismäßig kompliziert, dass ich irgendwie hoffe einfach nur die Komponente nicht richtig verstanden zu haben.
Anbei mein Beispiel. Wer Lust hat sich das zu gemüte zu führen kann das gern machen :-)
Wie ich das umsetzen kann, wenn die listview im edit mode nicht auf der vorgefertigten Checkbox aufbaut ist, sondern auf einem DynamicAppearance weis ich leider immer noch nicht. Bekomme das selbst platzierten glyphButton nicht angehakt wenn ich drauf drücke :?:roll:

fisipjm 14. Jul 2023 10:54

AW: Listview mit on Click und LongTap
 
Zitat:

Zitat von himitsu (Beitrag 1524558)
OnMouseUp ist ja OK, da man ja erst beim Loslassen wissen kann, ob es kurz oder lang war.


Wo man etwas aufpassen muß, ist wann "Clicks" ausgelöst werden.
z.B.
* Leertaste oder Buchstabe/ShortCut auf Button -> KeyDown = Click
* Enter auf Button -> oftmals KeyUp = Click
* linke Maustaste auf Button -> MouseUp = Click
* linke Maustaste auf Button und Move außerhalb des Buttons -> MouseUp = kein Click

* und ansonsten reagieren verschiedene Komponenten gern unterschiedlich, also manchmal Aktion beim Down oder beim Up


Ich hatte mal den Fall, dass beim KeyUp (F2) ein Fenster auf ging
und dieses Fenster ebenfalls auf F2 reagierte, aber im KeyDown, um es mit der "Standard-Aktion" wieder zu schließen.
Geplant war also "zwei Mal die F2-Taste drücken (und loslassen) für Schnellauswahl"
* erstes Drücken+Loslassen des F2 = Auswahlfenster auf
* zweites Drücken+Loslassen des F2 = Fenster zu, aber sofort wieder auf, weil siehe "erstes Drücken+Loslassen" ... und nun die Endlosschleife

Wie gesagt, ich brachs halt für Mobile und leider ist das Verhalten in Windows anders als in Mobile. Habs jetzt über das Tap Event gemacht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 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-2025 by Thomas Breitkreuz