Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie FindComponent bei Eigener Klasse (https://www.delphipraxis.net/97201-wie-findcomponent-bei-eigener-klasse.html)

ebber 6. Aug 2007 18:50


Wie FindComponent bei Eigener Klasse
 
Hallo

ich habe hier eine Klasse gemacht :

Delphi-Quellcode:

TKeySet = class
      x, y, z : Integer;
      Capt : String;
      constructor Create (xx, yy, zz : Integer; Captt : String);
  end;
Jetzt habe ich davon einige erzeugt. So z.B.

Delphi-Quellcode:

Power := TKeySet.Create(0, 0, 0, 'x');
Jetzt möchte ich die so irgendwie suchen, ich weis eben nicht wie ?:

Delphi-Quellcode:

TKeySet(FindComponent(Keyy)).x:=1;
Vielleicht habe ich da auch was ganz falsch verstanden, ich mache das mit den Klassen zum ersten mal.

MfG

mkinzler 6. Aug 2007 18:55

Re: Wie FindComponent bei Eigener Klasse
 
Erweitere die Klasse um eine Collection oder einen dynamischen Array als Klassenattribut und speichere die Namen der Objekte und Referenzen auf sie in Konstruktor darin ab. Im Destruktor entfernst du dann die Einträge. In der Find-Methode brauchst du dann nur nach der Bezeichnung suchen und die Referenz zurückgeben.

BenjaminH 6. Aug 2007 19:04

Re: Wie FindComponent bei Eigener Klasse
 
FindComponent findet Komponenten. Du musst deine Klasse also von TComponent ableiten:
Delphi-Quellcode:
class(TComponent)
Dann wird sie mit FindComponent gefunden. [Edit]Ob das bei deinem Vorhaben sinnvoll ist, ist eine andere Frage.

Robert Marquardt 6. Aug 2007 19:07

Re: Wie FindComponent bei Eigener Klasse
 
TComponent hat dazu eine Infrastruktur. Jede TComponent hat einen Owner der dafuer zustaendig ist die abhaengigen Komponenten zu zerstoeren wenn die Komponente zerstoert wird. Dazu hat jede TComponent eine TObjectList property namens Components. Zusaetzlich gibt es noch mit der virtuellen Methode Notification ein Benachrichtigungssystem, damit man eine Komponente auf vorzeitig zerstoern kann und die Verwaltung der Liste gehandhabt werden kann.

Alles in allem macht das hier keinen Sinn. Du willst sicher die erstellten Klassen in einem Array oder einer Liste von Variablen aufheben. Eine TObjectList waere dafuer geeignet. Dann kann man sich eine Funktion oder Methode schreiben, die anhand der Caption ein Element der Liste sucht.

marabu 6. Aug 2007 19:09

Re: Wie FindComponent bei Eigener Klasse
 
Hallo,

ich würde es so ausdrücken: Mit FindComponent suchst du nach Objekten, deren Klasse von TComponent abgeleitet wurde, aber nur wenn du keinen besseren Weg weißt. Normalerweise führst du eine eigene Objektverwaltung ein, wenn die von der VCL angebotenen Verwaltungen (basierend auf Owner oder Parent) dir nicht genügen.

Freundliche Grüße

ebber 6. Aug 2007 19:49

Re: Wie FindComponent bei Eigener Klasse
 
Also ist eine ObjectList das beste ?

Habe ich auch schon das gefunden http://www.dsdt.info/tutorials/tobjectlist/?page=1

aber ich habe da ein Problem :

[DCC Fehler] Main.pas(324): E2003 Undefinierter Bezeichner: 'TObjectList'

Muss man was bei uses hinzufügen oder ?

MfG

TheAn00bis 6. Aug 2007 19:54

Re: Wie FindComponent bei Eigener Klasse
 
Zitat:

Zitat von ebber
Muss man was bei uses hinzufügen oder ?

MfG

Ja, "Contnrs", hättest du selber auch in wenigen Sekunden rausfinden können. ;)

mkinzler 6. Aug 2007 19:54

Re: Wie FindComponent bei Eigener Klasse
 
ja Contnrs


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 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