Da beides Klassen sind kannst du das sehr sehr einfach und elegant unterscheiden.
listbox1.items.objects[i] leifert dir ein TObject. Und auf allen Objecten sind die Operatoren
is und
as erlaubt.
Mit
is kannst du eine unterstützte Klasse abfragen. Es werden dabei
alle Kindklassen berücksicht. Bei einem TButton also auch das TWinControl.
Delphi-Quelltext
1:
| if listbox1.items.objects[i] is TObject then |
Sollte also immer True zurückliefern, da jede Klasse von TObject abgelitten ist. Macht also auch nicht unbedingt sind.
Du bräuchtest für dich entweder.
Delphi-Quelltext
1: 2:
| if listbox1.items.objects[i] is TKante then |
oder
Delphi-Quelltext
1: 2:
| if listbox1.items.objects[i] is TKnoten then |
Mit
as kannst du eine Klasse casten. Allerdings wird vorher noch einmal überprüft ob es überhaupt möglich ist. Wenn nicht gibt es eine Exception.
Delphi-Quelltext
1: 2:
| with listbox1.items.objects[i] as TKnoten do |
As solltest du nur machen, wenn du vorher mit is die Klasse abgefragt hast. Wegen der Exception die auftritt, wenn die Klasse nicht unterstützt wird.
Wenn du bewusst eine Klasse als etwas anderes casten möchtest macht du TKnoten(Variablle). Wenn die Klasse nicht unterstützt wird, bekommst du wahrscheinlich eine Access Violation aber keine Exception.
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.