Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi FMX: ListviewItem bei OnTap (https://www.delphipraxis.net/196988-fmx-listviewitem-bei-ontap.html)

amigage 6. Jul 2018 10:15

FMX: ListviewItem bei OnTap
 
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
Delphi-Quellcode:
const Point: TPointF


Ich bedanke mich schon einmal im Voraus für eine Hilfe.

KodeZwerg 6. Jul 2018 10:42

AW: FMX: ListviewItem bei OnTap
 
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.

KodeZwerg 6. Jul 2018 10:52

AW: FMX: ListviewItem bei OnTap
 
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!)

amigage 6. Jul 2018 12:06

AW: FMX: ListviewItem bei OnTap
 
Ich sage erst einmal Danke für den Hinweis.:thumb:
ich werde es in Kürze einmal ausprobieren.

KodeZwerg 7. Jul 2018 15:48

AW: FMX: ListviewItem bei OnTap
 
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.

amigage 7. Jul 2018 17:07

AW: FMX: ListviewItem bei OnTap
 
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;


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

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