AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente erstellen: Untereinträge

Ein Thema von Martin K · begonnen am 27. Apr 2006 · letzter Beitrag vom 28. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

Komponente erstellen: Untereinträge

  Alt 27. Apr 2006, 18:08
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
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Komponente erstellen: Untereinträge

  Alt 27. Apr 2006, 18:36
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]
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Komponente erstellen: Untereinträge

  Alt 27. Apr 2006, 18:37
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
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Komponente erstellen: Untereinträge

  Alt 27. Apr 2006, 19:12
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...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Komponente erstellen: Untereinträge

  Alt 27. Apr 2006, 19:18
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;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Komponente erstellen: Untereinträge

  Alt 27. Apr 2006, 19:22
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')
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#7

Re: Komponente erstellen: Untereinträge

  Alt 27. Apr 2006, 19:23
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:
TBlubb = class(TObject) // Oder TComponent, bin mir nicht ganz sicher, einfach testen ;) Weder noch, TPersistent.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Komponente erstellen: Untereinträge

  Alt 27. Apr 2006, 19:28
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
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Komponente erstellen: Untereinträge

  Alt 27. Apr 2006, 19:35
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
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Komponente erstellen: Untereinträge

  Alt 27. Apr 2006, 19:46
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 ?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 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