AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

FMX TListView mit Seattle

Ein Thema von Sherlock · begonnen am 12. Apr 2016 · letzter Beitrag vom 15. Apr 2016
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#1

AW: FMX TListView mit Seattle

  Alt 13. Apr 2016, 17:03
Ah, OK. Bei der Gelegenheit, wo ich das sehe, und Dich grad "dran" hab. Wieso gibt es eigentlich keinen aufzählbaren Container für die einzelnen ListBoxItems bei einer FMX.TListBox? Oder hab ich den bloß übersehen?

Vielen Dank!

Sherlock
Mit "aufzählbaren Container" meinst Du die "Items"? TListbox hat in FMX sowohl die "Items", welches nur Strings sind und die "ListItems", welches die Liste der TListBoxItems repräsentiert.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.820 Beiträge
 
Delphi 12 Athens
 
#2

AW: FMX TListView mit Seattle

  Alt 14. Apr 2016, 07:13
Oh. Mein. Gott. Wald...Bäume...ich danke Dir!
Äh, Edith sagt "Nein". Ich muß wohl erklären was ich machen will:
Delphi-Quellcode:
 
var BoxITem: TListBoxItem;
.
.
.
 for BoxItem in SomeListBox.ListItems do
Das geht nicht, weil ListItems nicht wirklich die Liste ist, sondern mit einem Index aufgerufen werden muß und nur ein Item zurück gibt.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann

Geändert von Sherlock (14. Apr 2016 um 07:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#3

AW: FMX TListView mit Seattle

  Alt 14. Apr 2016, 22:06
Ach so, Du meinst die For in Enumeration.

Hier geht das standardmäßig nur mit den einfachen Strings:

Delphi-Quellcode:
var
  s: string;
begin
  for s in ListBox1.Items do begin
    ShowMessage (s);
  end;
end;
Warum das mit den ListItems nicht geht, hat Chris Rolliston vor einiger Zeit schon mal hier beschrieben und per ClassHelper auch eine Art Ersatzlösung dafür geboten:

https://delphihaven.wordpress.com/20...-anti-pattern/

In Anlehnung daran könnte man es (hier ein wenig vereinfacht und mit einer etwas anderen Namensgebung, die ich passender finde) für das for in mit den ListboxItems dann so machen:

Delphi-Quellcode:

type
  TFmxObjHelper = class helper for TFMXObject

  strict private
    procedure AddTypeOfObjects <T: class>(Parent: TFmxObject;
      var Arr: TArray<T>; var Count: Integer);
  public
    function ItemsOf<T: class>: TArray<T>;
  end;

procedure TFmxObjHelper.AddTypeOfObjects<T>(Parent: TFmxObject;
  var Arr: TArray<T>; var Count: Integer);
var
  Child: TFmxObject;
  I, z: Integer;
begin
  for I := 0 to Parent.childrenCount - 1 do
  begin
    Child := Parent.Children[I];

    if Child is T then
    begin
      if Length(Arr) = Count then SetLength(Arr, Count + 64);
      Arr[Count] := T(Child);
      Inc(Count);
    end;
    AddTypeOfObjects<T>(Child, Arr, Count);
  end;
end;

function TFmxObjHelper.ItemsOf<T>: TArray<T>;
var
  Count: Integer;
begin
  Count := 0;
  AddTypeOfObjects<T>(Self, Result, Count);
  SetLength(Result, Count);
end;


procedure TForm18.FormCreate(Sender: TObject);
var
  lbi: TListboxItem;
begin
  for lbi in ListBox1.ItemsOf<TListboxItem> do begin
    ShowMessage (lbi.text);
  end;
end;
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.239 Beiträge
 
Delphi 12 Athens
 
#4

AW: FMX TListView mit Seattle

  Alt 15. Apr 2016, 06:36
Ich benutze for loop mit Hilfsvariable
  for I := 0 to Count-1 do oder

  for I := Low(Items) to High(Items) do ich weiss das es etwas mehr code und etwas weniger Tipparbeit braucht,
aber gibt es ausserdem noch einen wirkichen Grund for Item in ItemList do zu benutzen ?

Das obere macht eigentlich nie Probleme, und die Performance ist auch OK.
Vielleicht bei 5 Mio. Items sollte man drüber nachdenken, aber im täglichen Leben reicht doch eine Version.

Rollo

Geändert von Rollo62 (15. Apr 2016 um 06:43 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

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 06:16 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