Autor Beitrag
Delphi_Neuling
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 03.10.04 16:33 
Hi,

ich habe eine Listbox in die ich mit
ausblenden Delphi-Quelltext
1:
 ListBox1.AddItem('Knoten'+inttostr(itemcount),TKnoten.create(StrToInt(edit4.Text),strtoint(edit5.Text)));					

oder
ausblenden Delphi-Quelltext
1:
Listbox1.AddItem('Kante'+inttostr(itemcount),TKante.create(strtoint(edit4.Text),strtoint(edit5.Text),strtoint(edit6.Text),strtoint(edit7.Text)));					

Einträge hinzufüge.

Nun möchte ich ja auch an die von mir erzeugten Objekte auch mal wieder ran. Nur wie unterscheide ich nachher
ob: listbox1.items.objects[i] ein Knoten oder eine Kante ist, damit ich mit den Objekten weiterarbeiten kann.

Gruß der Delphi_Neuling
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: So 03.10.04 16:56 
speicher doch in den objekten selber was sie sind. ansonsten schau halt ob in dem markierten eintrage das wort kante oder knoten vorkommt (das ist die unelegante methode)

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: So 03.10.04 19:44 
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.
ausblenden 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.
ausblenden Delphi-Quelltext
1:
2:
if listbox1.items.objects[i] is TKante then 
  // Mach was

oder
ausblenden Delphi-Quelltext
1:
2:
if listbox1.items.objects[i] is TKnoten then
  // Mach was



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.

ausblenden Delphi-Quelltext
1:
2:
with listbox1.items.objects[i] as TKnoten do
  // Mach was knotenspezifisches


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.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 03.10.04 20:38 
Lossy eX hat folgendes geschrieben:
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.

Seit wann ist eine AV KEINE Exception???
Wenn ich mich richtig erinnere steht in den System Utilities (SysUtils) :D sowas von EAccessViolation = class(EExternal) (Zeile 279 für die, die's interessiert), die ihrerseits mit EExternal = class(Exception) deklariert werden (Zeile 255 für die, die auch dies interessiert).

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: So 03.10.04 22:17 
Okay. Hast ja recht. Ist ja auch ne Exception. War ein bissel falsch formuliert. Ich meinte eine AV ist keine "kontrollierte" Exception. So etwas wie Listindex out of bounds. AV's werden ja nicht mit Absicht ausgelöst. Die tretten ungewollt auf.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.