AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FMX TListView mit Seattle

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

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#1

FMX TListView mit Seattle

  Alt 12. Apr 2016, 09:28
Hallo zusammen. Ich versuche seit ein paar Tagen aus der Delphi-Referenz durchsuchenFMX.ListView in der Version von Seattle schlau zu werden. Es klappt so leidlich, aber ein bis zwei Dinge verstehe ich einfach nicht.
  1. Wie kann ich Multiselect deaktivieren? Papa Google findet leider nur Infos zur alten TListView und mit Seattle wurde ja reichlich refactored. Es gibt schlicht keine Property im Sinne von MultiSelect oder SelectionType
  2. Wenn ich das ListView in den Editmodus schalte, haben alle Items unweigerlich eine Checkbox, lässt sich das unterbinden?

Abgesehen davon, daß manche der Beispiele in Laufzeitfehlern enden, bauen sie zu 99% auf LiveBindings auf, so daß die ListView schon zur Designzeit fix und fertig ist - nicht wirklich didaktisch wertvoll. Hat einer von Euch Erfahrung mit der FMX.TListView von Seattle?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: FMX TListView mit Seattle

  Alt 12. Apr 2016, 11:23
Ich habe mich auch lange mit der TListView herumgeärgert. Über GetIt habe ich mir nun die ksComponents installiert, darunter ist eine Komponente namens TksTableView, die ist einer TListView ähnlich, allerdings IMO einfacher zu handhaben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: FMX TListView mit Seattle

  Alt 12. Apr 2016, 15:04
Danke für den Tipp, ich schau die mir mal an.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: FMX TListView mit Seattle

  Alt 12. Apr 2016, 20:01
Hallo zusammen. Ich versuche seit ein paar Tagen aus der Delphi-Referenz durchsuchenFMX.ListView in der Version von Seattle schlau zu werden. Es klappt so leidlich, aber ein bis zwei Dinge verstehe ich einfach nicht.
  1. Wie kann ich Multiselect deaktivieren? Papa Google findet leider nur Infos zur alten TListView und mit Seattle wurde ja reichlich refactored. Es gibt schlicht keine Property im Sinne von MultiSelect oder SelectionType
  2. Wenn ich das ListView in den Editmodus schalte, haben alle Items unweigerlich eine Checkbox, lässt sich das unterbinden?

Abgesehen davon, daß manche der Beispiele in Laufzeitfehlern enden, bauen sie zu 99% auf LiveBindings auf, so daß die ListView schon zur Designzeit fix und fertig ist - nicht wirklich didaktisch wertvoll. Hat einer von Euch Erfahrung mit der FMX.TListView von Seattle?

Sherlock
Mit
Listview1.ItemAppearance.ItemEditAppearance := 'Custom'; kannst Du die Checkboxen für den Editmode ausschalten, hast dann aber keine extra Auswahlmöglichkeit mehr.

Wenn nur ein Item auswählbar sein soll, kannst Du auch im OnItemClick-Event reagieren:

Delphi-Quellcode:
procedure TForm33.ListView1ItemClick(const Sender: TObject;
  const AItem: TListViewItem);
var
  L: Integer;
begin
  for L := 0 to Listview1.Items.Count-1 do begin
    Listview1.Items[L].Checked := Listview1.Items[L] = AItem;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: FMX TListView mit Seattle

  Alt 13. Apr 2016, 07:00
Mit
Listview1.ItemAppearance.ItemEditAppearance := 'Custom'; kannst Du die Checkboxen für den Editmode ausschalten, hast dann aber keine extra Auswahlmöglichkeit mehr.
Bei mir sind die Checkboxen ohnehin nicht anklickbar...ich dachte das muss so sein.
Wenn nur ein Item auswählbar sein soll, kannst Du auch im OnItemClick-Event reagieren:

Delphi-Quellcode:
procedure TForm33.ListView1ItemClick(const Sender: TObject;
  const AItem: TListViewItem);
var
  L: Integer;
begin
  for L := 0 to Listview1.Items.Count-1 do begin
    Listview1.Items[L].Checked := Listview1.Items[L] = AItem;
  end;
end;
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#6

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.763 Beiträge
 
Delphi 11 Alexandria
 
#7

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.479 Beiträge
 
Delphi 11 Alexandria
 
#8

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
Online

Registriert seit: 15. Mär 2007
3.910 Beiträge
 
Delphi 12 Athens
 
#9

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


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:43 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