![]() |
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 ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz