Komponentenentwicklung - geschachtelte Eigenschaften
-
nicht ganz, da fehlt noch was [Edit:] selbst das dürfte noch zu wenig sein...
class MeineKomponente : public TComponent { private: Kreis *FMKreis; __published: __property Kreis *MKreis = (read=FMKreis, write=FMKreis); };und im Konstruktor von MeineKomponente muß FMKreis mit new erzeugt und im Destruktor mit delete gelöscht werden
und falls du Defaultwerte haben willst, sollte ein Kunstruktor in der class Kreis definiert werden
[Edit2] bei den Properties in class Kreis fehlen die Rückgabetypen
-
Hallo
und den Pointer auf FMkreis must du machen, weil du Kreis von TObject ableiten must, um mit __published zu arbeiten. Außerdem must du bei __property moch den Typ angeben.
bis bald
akari
-
Dankeschön!!!
Werde das gleich mal ausprobieren!

Liebe Grüsse ...
-
schau dir auch das Kapitel "Die Zugriffseigenschaften deklarieren" in der BCB-Hilfe zur Komponentenentwicklung an
-
Supi

Das funktioniert!!!!!!!Aber warum schreibt der Objektinspektor jetzt "(Kreis)" als Wert von "Kreis",
und nicht "[wert, wert]" wie bei z.B. Anchors?Bei "Font" schreibt er zwar auch "(Font)",
aber da gibt es auch den Button mit den 3 Punkten [...]
zum aufrufen eines neuen Fensters!Wie kann ich denn das eine, wie das andere realisieren?

-
weil TAnchors eine enum-Variable ist und parameter gesetzt werden
und bei TFont einen Editor definiert ist (wie auch bei TPicture etc..)
ich glaube letztens war ein thread darüber offen, wie man solche editore definieren kann
-
über die (...) öffnet man die Editoren, wie bei Font
das geht dann ungefähr so:namespace MeineKomponente { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(MeineKomponente)}; RegisterComponents("Beispiele", classes, 0); RegisterPropertyEditor(__typeinfo(Kreis),__classid(MeineKomponente), "Kreis",__classid(KreisProperty)); // -> Variante 1 RegisterPropertyEditor(__typeinfo(Kreis),NULL,"", __classid(KreisProperty)); // -> Variante 2 }auch in der BCB-Hilfe zur Komponentenentwicklung gibts einige Themen dazu
[Edit] den ensprechenden Editor (KreisProperty) mußt du dir dafür natürlich auch noch schreiben
das bei Anchors geht glaub ich nur bei Werten von Typ bool, wie auch bei Style
ansonsten wird halt nur der Klassenname angezeigt
-
BigNeal schrieb:
weil TAnchors eine enum-Variable ist
TAnchors ist ein Set, das Einträge vom (enum-)Typ TAnchorKind aufnehmen kann.
Linnea schrieb:
das bei Anchors geht glaub ich nur bei Werten von Typ bool, wie auch bei Style
Welches Style meinst Du? Die gebräuchlichen (z.B. TFont::Style, TBrush::Style) sind ebenfalls vom Typ Set.
Gruß,
Alexander
-
Mein Gott, das wird richtig geil!!!
Ich beiß mich dann mal durch!
Schönen Dank an euch alle!

War bestimmt nicht meine letzte Frage...

-
insaint schrieb:
Nebenbei: Weis jmd, wie ich anstatt 'ClassExplorer' immer 'Klassenhierachie' neben meinen Quellcode anzeigen lassen kann?
Klassenhierarchie? Meinst du die Objekt-Hierarchie? Wenn ja:
- Rechtsklick in der Objekt-Hierarchie; wenn nicht schon markiert, "Andockbar" markieren
- wenn du Class-Explorer nicht mehr dort haben willst: per Drag&Drop aus Editor "rausziehen"
- Objekt-Hierarchie in Editorfenster draggen
- Aktuellen Desktop speichernMoritz
-
Super, funktioniert!
Recht schönen Dank!
