AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

FMX: ListviewItem bei OnTap

Ein Thema von amigage · begonnen am 6. Jul 2018 · letzter Beitrag vom 7. Jul 2018
Antwort Antwort
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
186 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

FMX: ListviewItem bei OnTap

  Alt 6. Jul 2018, 10:15
Hallo,

bisher habe ich die Listbox unter Android und Windows verwendet.
Dort wurde vor dem OnItemClick, zuerst OnGesture ausgelöst, sodass ich bei einem LongTap ein Menü einblenden konnte.

Jetzt nutze ich für eine andere App die Listview, da man diese besser anpassen kann.
Hier habe ich das Problem, dass es hier umgekehrt ist: erst OnItemClick, dann OnGesture, sodass ich nicht auf LongTap reagieren kann.

Also will ich jetzt OnTap verwenden, da dies nach LongTap ausgelöst wird, und unter Windows auf OnItemClick weiterleiten.

Meine Frage: wie komme ich das selektierte ListItem? OnTap gibt mir als Parameter nur const Point: TPointF

Ich bedanke mich schon einmal im Voraus für eine Hilfe.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg
Online

Registriert seit: 1. Feb 2018
2.066 Beiträge
 
Delphi 2010 Professional
 
#2

AW: FMX: ListviewItem bei OnTap

  Alt 6. Jul 2018, 10:42
Delphi-Quellcode:
function GetSelectedIndex (LV: TListView): Integer;
begin
  Result := -1;
  if LV.Selected <> nil then
   Result := LV.Selected.Index;
end;
Füge das da ein wo Du es brauchst.
Wenn Result -1 dann war nichts selektiert.
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...

Geändert von KodeZwerg ( 6. Jul 2018 um 11:16 Uhr) Grund: code optimiert
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg
Online

Registriert seit: 1. Feb 2018
2.066 Beiträge
 
Delphi 2010 Professional
 
#3

AW: FMX: ListviewItem bei OnTap

  Alt 6. Jul 2018, 10:52
Delphi-Quellcode:
Function GetIndexAtPos (LV: TListView; TP: TPointF): Integer;
var
  I: Integer;
  TR: TRectF;
begin
  Result := -1;

  for I := 0 to LV.Items.Count-1 do begin
    TR := LV.GetItemRect (I);

    if TR.Contains (TP) then begin
      Result := I;
      Break;
    end;
  end;
end;
Oder benutze es so in Deinem Aufruf, wieder das gleiche, wenn Result -1 dann war nichts selektiert.

(Funktion von Harry Stahl!)
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
186 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: FMX: ListviewItem bei OnTap

  Alt 6. Jul 2018, 12:06
Ich sage erst einmal Danke für den Hinweis.
ich werde es in Kürze einmal ausprobieren.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg
Online

Registriert seit: 1. Feb 2018
2.066 Beiträge
 
Delphi 2010 Professional
 
#5

AW: FMX: ListviewItem bei OnTap

  Alt 7. Jul 2018, 15:48
Es sollte schon als Lösung funktionieren, sowie als auch, Du siehst ja was bei den Funktionen passiert, entweder als Selected abrufen oder als Positionsangabe, beides sollte für Single-Selections wunderbar funktionieren.
Gern geschehen und ein schönes Wochenende.
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
186 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: FMX: ListviewItem bei OnTap

  Alt 7. Jul 2018, 17:07
Hallo, ja das hat funktioniert!

Nur bei der GetIndexAtPos() muss man noch die Größen der darüber platzierten Elemente beachten, sonst kommt es zu fehlerhaften Rückgaben.

Delphi-Quellcode:
function GetIndexAtPos (LV: TListView; TP: TPointF): Integer;
var
  I: Integer;
  TR: TRectF;
  HeightOfElementAbove : Single;
begin
  HeightOfElementAbove := 0;
  if Element.Visible then HeightOfElementAbove := Element.Height;

  TP.Y := TP.Y - HeightOfElementAbove;
  Result := -1;

  for I := 0 to LV.Items.Count-1 do begin
    TR := LV.GetItemRect (I);

    if TR.Contains (TP) then begin
      Result := I;
      Break;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf