Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponente erstellen: Untereinträge (https://www.delphipraxis.net/68306-komponente-erstellen-untereintraege.html)

Martin K 27. Apr 2006 17:08


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 :?:

Die Muhkuh 27. Apr 2006 17:36

Re: Komponente erstellen: Untereinträge
 
Hi,

ganz grob:

Delphi-Quellcode:
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;
[edit]Ist jetzt nicht ganz das, was du willst, aber es macht deutlich, wie es funktioniert[/edit]

Der_Unwissende 27. Apr 2006 17:37

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

Martin K 27. Apr 2006 18:12

Re: Komponente erstellen: Untereinträge
 
Hab jetzt nach Spiders Methode diesen Code geschrieben:
Delphi-Quellcode:
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;
Werd ich gleich mal testen, aber zumindest meckert der Compiler nicht...

@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:
type
  TLinkLabel = class(TLabel)
  private
    THoverEffects = Record
      Color, Cursor, Underline: Boolean;
    Effects: THoverEffects;
  public
    property HoverEffect: THoverEffects read Effects write Effects;
  end;
Aber das hat meinem Compiler irgendwie nicht gefallen...

shmia 27. Apr 2006 18:18

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;

Martin K 27. Apr 2006 18:22

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')

Khabarakh 27. Apr 2006 18:23

Re: Komponente erstellen: Untereinträge
 
Zitat:

Zitat von Martin K
Aber das hat meinem Compiler irgendwie nicht gefallen...

Nested Types gibt es nur in Delphi.Net, unter Win32 musst du den Record auf der gleichen Ebene wie TLinkLabel deklarieren (würde ich aber unter .Net auch machen).
Recordproperties werden allerdings sowieso nicht im OI angezeigt, nimm Spiders Weg. Dazu noch eine Anmerkung:
Delphi-Quellcode:
TBlubb = class(TObject) // Oder TComponent, bin mir nicht ganz sicher, einfach testen ;)
Weder noch, TPersistent.

Martin K 27. Apr 2006 18:28

Re: Komponente erstellen: Untereinträge
 
Okay, also ich habe jetzt praktisch zwei Möglichkeiten:

1.
Delphi-Quellcode:
type
  THoverEffect = (heColor, heCursor, heUnderline);
  THoverEffects = set of THoverEffect;

  TLinkLabel = class(TLabel)
  private
    he: THoverEffects;
  published
    property HoverEffect: THoverEffects read he write he;
  end;
2.
Delphi-Quellcode:
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;
Welche :?:

Hawkeye219 27. Apr 2006 18:35

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:
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;
Gruß Hawkeye

Martin K 27. Apr 2006 18:46

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 05:55 Uhr.
Seite 1 von 2  1 2      

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