Komponente erstellen: Untereinträge
Hi,
hab mal ne Frage zur Erstellung von Komponenten: Wie kann ich es machen, dass ich eine Eigenschaft (property) mit Untereigenschaften im Objektinspektor habe, also etwa so wie bei einer TForm die Eigenschaft BorderIcons, die versch. Boolean-property's [biSystemMenu,biMinimize,biMaximize,biHelp] als Untereigenschaft hat :?: |
Re: Komponente erstellen: Untereinträge
Hi,
ganz grob:
Delphi-Quellcode:
[edit]Ist jetzt nicht ganz das, was du willst, aber es macht deutlich, wie es funktioniert[/edit]
TBlubb = class(TObject) // Oder TComponent, bin mir nicht ganz sicher, einfach testen ;)
published property Bla: Integer read FBla write FBla; property Blu: String read FBlu write FBlu; end; TKompo = class(TComponent) published property Blubb: TBlubb read FBlubb write FBlubb; end; |
Re: Komponente erstellen: Untereinträge
HI,
Boolean Properties sind das nicht ganz. Es handelt sich vielmehr um ein Bitfeld. In Delphi benötigst du dazu dass Schlüsselwort set. Schau einfach mal in die OH (da solltest du dann fündig werden) und/oder frag dann ggf. nochmal nach. Gruß Der Unwissende |
Re: Komponente erstellen: Untereinträge
Hab jetzt nach Spiders Methode diesen Code geschrieben:
Delphi-Quellcode:
Werd ich gleich mal testen, aber zumindest meckert der Compiler nicht...
type
THoverEffects = class(TComponent) private Col,Cur,U: Boolean; public property Color: Boolean read Col write Col; property Cursor: Boolean read Cur write Cur; property Underline: Boolean read U write U; end; type TLinkLabel = class(TLabel) private Effects: THoverEffects; public property HoverEffect: THoverEffects read Effects write Effects; end; @Der_Unwissende: Wie funktioniert das denn mit dem Bitfeld ? Hast Du evtl. ein Code-Beispiel ? Ursprünglich wollte ich es mit einem Record lösen, also so:
Delphi-Quellcode:
Aber das hat meinem Compiler irgendwie nicht gefallen...
type
TLinkLabel = class(TLabel) private THoverEffects = Record Color, Cursor, Underline: Boolean; Effects: THoverEffects; public property HoverEffect: THoverEffects read Effects write Effects; end; |
Re: Komponente erstellen: Untereinträge
Es handelt sich dabei um Mengen (Set of).
Delphi-Quellcode:
type
THoverEffect = (heColor, heCursor, heUnderline); THoverEffects = set of THoverEffect; TLinkLabel = class(TLabel) private FEffects: THoverEffects; public property HoverEffect: THoverEffects read FEffects write FEffects; end; |
Re: Komponente erstellen: Untereinträge
Und das geht ?
Weiß denn Delphi dann auch, dass das alles Boolean-property's sind ? (könnte ja auch Integer sein, wie z.B. bei einer TForm unter 'Constraints') |
Re: Komponente erstellen: Untereinträge
Zitat:
Recordproperties werden allerdings sowieso nicht im OI angezeigt, nimm Spiders Weg. Dazu noch eine Anmerkung:
Delphi-Quellcode:
Weder noch, TPersistent.
TBlubb = class(TObject) // Oder TComponent, bin mir nicht ganz sicher, einfach testen ;)
|
Re: Komponente erstellen: Untereinträge
Okay, also ich habe jetzt praktisch zwei Möglichkeiten:
1.
Delphi-Quellcode:
2.
type
THoverEffect = (heColor, heCursor, heUnderline); THoverEffects = set of THoverEffect; TLinkLabel = class(TLabel) private he: THoverEffects; published property HoverEffect: THoverEffects read he write he; end;
Delphi-Quellcode:
Welche :?:
type
THoverEffects = class(TPersistent) private Col,Cur,U: Boolean; published property heColor: Boolean read Col write Col; property heCursor: Boolean read Cur write Cur; property heUnderline: Boolean read U write U; end; type TLinkLabel = class(TLabel) private he: THoverEffects; published property HoverEffect: THoverEffects read he write he; end; |
Re: Komponente erstellen: Untereinträge
Hallo Martin,
die Lösung von shmia ist fast richtig. Man muß nur aus dem "public" ein "published" machen:
Delphi-Quellcode:
Gruß Hawkeye
type
THoverEffect = (heColor, heCursor, heUnderline); THoverEffects = set of THoverEffect; TLinkLabel = class(TLabel) private FEffects: THoverEffects; published // <<--- korrigiert! property HoverEffect: THoverEffects read FEffects write FEffects; end; |
Re: Komponente erstellen: Untereinträge
Ja, es funktioniert!!!
Hatte nur einen Fehler gemacht: 'public' muss durch 'published' ersetzt werden! (@Hawkeye219: Der rote Kasten.... Werd es auch in mienen beiden Codes oben gleich ändern) Habe die 1. Möglichkeit genommen. Nur noch eine Frage: Kann man dort Standardwerte festlegen ? Ich miene nicht, einfach bei Create diese Werte zuordnen, sondern richtige Standardwerte; also bei Delphi7 ist es ja so, dass Standardwerte im OI normal geschrieben sind (z.B. wenn bei einer Form BorderIcons auf [biSystemMenu,biMinimize,biMaximize] steht). Sobald man aber einen Wert im OI ändert, sind ist dieser Fett geschrieben. Jetzt ist es so, dass für alle drei Werte 'False' der Standardwert ist (also HoverEffect = []), kann ich z.B. [heColor,heCursor] als Standard definieren ? |
Re: Komponente erstellen: Untereinträge
klar, das geht:
Delphi-Quellcode:
Allerdings mußt du diese Werte auch im Constructor setzen! Der bei "property" angegebene Wert dient nur zur Steuerung der Ausgabe in eine .dfm-Datei. Wenn der aktuelle Wert der Eigenschaft dem Standardwert entspricht, wird die Eigenschaft nicht in die .dfm-Datei geschrieben.
property HoverEffect: THoverEffects
read FEffects write FEffects default [heColor, heCursor]; Gruß Hawkeye |
Re: Komponente erstellen: Untereinträge
Gut, danke!
|
Re: Komponente erstellen: Untereinträge
Und wie macht man das nun, wenn man nicht nur boolische Werte hat? D.h. wenn man z.B. TColor, TFont, etc. als Untereinträge haben möchte?
|
Re: Komponente erstellen: Untereinträge
Hallo Sascha,
TColor ist eigentlich nur ein Integerwert und erfordert keine Sonderbehandlung. Ein TFont-Feld wird im Konstruktor erzeugt und im Destruktor wieder freigegeben. Um Änderungen am Fontobjekt feststellen zu können, kann man eine private Behandlungsroutine für das OnChange-Ereignis einklinken. Bei echten Komponenten als Unterobjekt ist zu beachten, daß nach dem Erzeugen deren Methode SetSubComponent aufgerufen wird, damit sie ihre Eigenschaften in die .dfm-Datei schreiben (siehe hier). Den Umgang mit TColor bzw. TFont schaust du dir am besten im VCL-Quelltext zu TControl an (Constructor/Destructor). Gruß Hawkeye |
Re: Komponente erstellen: Untereinträge
Zitat:
Anstatt Boolean dann einfach TColor bzw. TFont als Datentyp angeben.... Oder liege ich da falsch? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 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