![]() |
Fmx FMX.ListView.TListView Fix
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
in meinem RadStudio XE8 + Upd1 Subrc. sieht der FMX.ListView.TListView folgendermassen aus:
Code:
Das ähnliche Problem und ein FIX ist
procedure TCustomListView.UpdateItemLookups;
var I, TotalHeight, PrevItemHeight, CurHeaderRef: Integer; begin if FHeightSumsNeedUpdate then begin TotalHeight := 0; if (FSearchEdit <> nil) and FSearchEdit.Visible then TotalHeight := TotalHeight + Ceil(FSearchEdit.Height); FHeightSums.Clear; FHeightSums.Add(TotalHeight); CurHeaderRef := -1; for I := 0 to Items.Count - 1 do begin if I > 0 then begin PrevItemHeight := GetItemHeight(I - 1); Inc(TotalHeight, PrevItemHeight); FHeightSums.Add(TotalHeight); end; if Items[I].Purpose = TListItemPurpose.Header then begin CurHeaderRef := I; TOpenListBoxItem(Items[I]).FHeaderRef := I; end; if Items[I].Purpose = TListItemPurpose.None then begin if Items[I].Count > 0 then TOpenListBoxItem(Items[I]).FHeaderRef := CurHeaderRef else CurHeaderRef := -1; end; end; Inc(TotalHeight, GetItemHeight(Items.Count - 1)); if TotalHeight <> FMaxKnownHeight then begin FHeightSums.Add(TotalHeight); //S4:Fix added FMaxKnownHeight := TotalHeight; UpdateScrollingLimits; end; FHeightSumsNeedUpdate := False; end; end; function TCustomListView.FindItemAbsoluteAt(ViewAt: Integer): Integer; var Left, Right, Pivot, Value: Integer; iUp: Integer; begin UpdateItemLookups; if Items.Count < 1 then Exit(-1); if ViewAt < 1 then Exit(0); if ViewAt >= FHeightSums[FHeightSums.Count - 1] then Exit(-1); //S4:Fix: FHeightSums.Count - 1); Left := 0; Right := FHeightSums.Count - 1; Pivot := 0; while Left <= Right do begin Pivot := (Left + Right) div 2; Value := FHeightSums[Pivot]; if Value = ViewAt then Exit(Pivot); if Value > ViewAt then Right := Pivot - 1 else Left := Pivot + 1; end; Result := Pivot; if (Result > 0) and (Result < FHeightSums.Count) and (FHeightSums[Result] >= ViewAt) then Dec(Result); end; ![]()
Code:
Allerdings reicht das bei mir (XE8 Pro + Upd1 Subscr.) nicht aus, denn es werden wohl zuwenig FHeightSums angelegt,
if ViewAt >= FHeightSums[FHeightSums.Count - 1] then
Exit(-1); //S4:Fix: FHeightSums.Count - 1); dazu muss ich einen 2ten Fix anlegen:
Code:
Und natürlich muss ich FMX.ListView in meinen Code kopieren, was ich eigentlich nicht möchte.
Inc(TotalHeight, GetItemHeight(Items.Count - 1));
if TotalHeight <> FMaxKnownHeight then begin FHeightSums.Add(TotalHeight); //S4:Fix added FMaxKnownHeight := TotalHeight; UpdateScrollingLimits; end; Ich habe das Ganze auch nicht auf Herz und Nieren getestet (Header, Footer, GroupHeader, iOS, And, Win, Mac, etc.), aber es löst erstmal quick&dirty mein Problem. Vielleicht hat ja jemand schon eine bessere Lösung gefunden ? Anbei ein Demo (die DB ignorieren, das war für einen anderen Test). Rollo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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