Zitat:
[Fehler] TDesignUnit.pas(5): can't find
unit "Generics.Collections"
Fehlen Default-Namespaces in den Projektoptionen?
Die
Unit heißt inzwischen System.Generics.Collections und wenn kein "System" als Default-Namespace definiert wurde, dann wird sie nicht gefunden, außer man schreibt den kompletten Namen.
TList = Liste mit beliebigen Zeigern (Pointer, Objekte oder sonstwas, was in einen Pointer/Integer gecastet werden kann)
TObjectList = Liste außschließlich mit Objektzeigeren (TObject und Nachfahren)
TComponentList = die kennt auch den TComponent-Typen und sein Notify-System (sie lässt sich informieren wenn ein Objekt gelöscht wird und entfernt dann auch das Item)
Die generischen TList<TTMSFNCToolBarButton> und TObjectList<TTMSFNCToolBarButton> wie oben, inkl. strikter/impliziter Typisierung.
Delphi-Quellcode:
x := ButtonList.Items[0]; // hier kommt der generische Typ raus (x ist er oder dessen Vorfahre)
ButtonList.Items[0].irgendwas // hier ebenso direkt der generische Typ
ButtonList.Items[0] := x; // hier geht er rein, nur er und dessen Nachfahren
TObjectList weiß was ein Objekt ist, kann daher auch Free/Destroy aufrufen, wenn ein Item gelöscht wird (wenn Owns=True, z.B. beim List.Delete ... nicht beim List.Extract
)
Die Generischen haben den Cast eingebaut, also
ButtonList.Items[0].Name
statt dem weichen Cast
(ButtonList.Items[0] as TTMSFNCToolBarButton).Name
oder des Harten
TTMSFNCToolBarButton(ButtonList.Items[0]).Name
.
Und Default-Property (das
default in Bezug auf Array-Property) kann man auch weglassen, weil bei Array-Zugriff implizit zum Default weitergeleitet wird.
ButtonList[0].Name
bzw.
(ButtonList[0] as TTMSFNCToolBarButton).Name
oder
TTMSFNCToolBarButton(ButtonList[0]).Name