Delphi-PRAXiS

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 Property mit mehreren Eigenschaften gleichzeit?? (https://www.delphipraxis.net/10162-property-mit-mehreren-eigenschaften-gleichzeit.html)

phlux 12. Okt 2003 20:16


Property mit mehreren Eigenschaften gleichzeit??
 
Hi!
Ich möchte für meine Komponente eine Property erstellen, die es erlaubt mehrere Eigentschaften gleichzeitig zu haben (anzusehen an der TToolbar Komponente, die Property EdgeBorders kann ebLeft, ebTop, ebBottom, ebRight annehmen). Hat jemand nen Plan wie man das machen kann?

mfg phluphie :hi:

Christian Seehase 12. Okt 2003 21:50

Re: Property mit mehreren Eigenschaften gleichzeit??
 
Moin Phlux,

dazu muss die Eigenschaft nur vom Typ set of TWasAuchImmer sein.
z.B.

Delphi-Quellcode:
type
  TSeite = (Oben,Unten,Links,Rechts);
  TSeiten = set of TSeite;
//...
private
  FSeite : TSeiten;
published // EDIT: public zu published korrigiert. Soll ja im OI erscheinen.
  property Seite : TSeiten read FSeite write FSeite;
//...
Jetzt hat die Eigenschaft Seite im OI die Auswahl Oben, Unten, Links und Rechts mit der jeweiligen Einstellung true/false.

Daniel B 12. Okt 2003 22:08

Re: Property mit mehreren Eigenschaften gleichzeit??
 
Moin Christian,
Zitat:

Zitat von Christian Seehase
Jetzt hat die Eigenschaft Seite im OI die Auswahl Oben, Unten, Links und Rechts mit der jeweiligen Einstellung true/false.

Ist das jetzt z.B. wie bei ViewStyle einer ListView wo man im OI so ne ComboBox zur Auswahl hat, oder eher wie bei Font, wo so ein + davor ist, dann alle Optionen gleichzeitig zu sehen sind und sich jedes auf True/False setzen lässt?

Wormid 12. Okt 2003 22:26

Re: Property mit mehreren Eigenschaften gleichzeit??
 
Sollte ne Combobox werden... Wenn ich mich nicht irre, dann ist das "+" nur vor Unterobjekten zu finden... in deinem Beispiel eben ein Objekt der Klasse TFont.

Gruß

Wormid

Christian Seehase 13. Okt 2003 00:24

Re: Property mit mehreren Eigenschaften gleichzeit??
 
Moin Daniel,

weder wie ViewStyle noch wie Font ;-)
Sollte es sein, wie bei ViewStyle, müsste man als Typ TSeite nehmen.
Dann liesse sich eine auswählen.

Wenn es so aussehen soll, wie bei TFont, müsste der Typ der Eigenschaft selber wieder ein Objekt mit Eigenschaften sein.
Bespiel (Fortführung von oben)

Delphi-Quellcode:
type
  TMyObject = class(TObject)
  private
    FiHeight : integer;
    FColor  : TColor;
  published
    property Height : integer read FiHeight write FiHeight;
    property Color : TColor read FColor  write FColor;
  end;

  // Objekt von oben
  private
    FMyObject : TMyObject;
  published
    property MyObject : TMyObject read FMyObject write FMyObject;
  end;
Jetzt würde im OI eine Eigenschaft

Code:
 + MyObject
   Height
   Color (mit ComboBox)
enthalten sein.

Pseudemys Nelsoni 13. Okt 2003 04:06

Re: Property mit mehreren Eigenschaften gleichzeit??
 
Zitat:

Zitat von Christian Seehase
Delphi-Quellcode:
type
  TSeite = (Oben,Unten,Links,Rechts);
  TSeiten = set of TSeite;
//...
private
  FSeite : TSeiten;
published // EDIT: public zu published korrigiert. Soll ja im OI erscheinen.
  property Seite : TSeiten read FSeite write FSeite;
//...

hallo christian, ich habe mich mal gefragt was "set of" bewirkt, wieso muss man ein "TSeiten"-set machen? kann man nicht direkt "TSeite" benutzen?

Hansa 13. Okt 2003 06:01

Re: Property mit mehreren Eigenschaften gleichzeit??
 
Zitat:

Zitat von silent
...ich habe mich mal gefragt was "set of" bewirkt, wieso muss man ein "TSeiten"-set machen? kann man nicht direkt "TSeite" benutzen?

Was das Set of bewirken soll, verstehe ich jetzt auch nicht. Handelt es sich um einen reinen Aufzählungstyp, so erscheint kein +. Z.B. bei so was :
Delphi-Quellcode:
type
  TLabelPosition = (lpFree, lpAbove, lpBelow, lpLeft, lpRight);
  ...
  TRealLabel = class(TCustomLabel)
  ...
    published
      property Position: TLabelPosition read FPosition write SetPosition;
  end;
Hier würde eine Property "Position" im OI erscheinen, mit einer simplen Combobox. Und bei so was:
Delphi-Quellcode:
TLabeledRealEdit = class(TEdit)
  ...
  published
    property RealLabel: TLabel read FLabel;
  end;
wäre eine neue property namens RealLabel vorhanden mit einem +, ganz einfach weil es sich nicht um einen einfachen Typ handelt, sondern um ein Objekt, das von einem abgeleitet wird, das selber eigene properties hat. Tja, das wars schon. Man vergleiche mal TColor und TFont. Vielleicht ist das auch einfacher. TColor hat kein + weil :
Delphi-Quellcode:
type
  PColor = ^TColor;
  TColor = -$7FFFFFFF-1..$7FFFFFFF;

const
  clScrollBar = TColor(COLOR_SCROLLBAR or $80000000);
  clBackground = TColor(COLOR_BACKGROUND or $80000000);
Das ist also ein Aufzählungstyp. TFont hat auch eine Eigenschaft TColor, aber zusätzlich noch die Schriftart, die Größe usw. deshalb dort ein +. Und genau deshalb ist bei der Property Color von TFont kein + mehr.

Motzi 13. Okt 2003 11:00

Re: Property mit mehreren Eigenschaften gleichzeit??
 
Der Unterschied zwischen einem Set und einem Enumerations-Typ ist einfach der, dass der Set mehrere Elemente des Enumerations-Typs gleichzeitig enthalten kann.
Delphi-Quellcode:
type
  TSeite = (Oben, Unten, Links, Rechts);
  TSeiten = set of TSeite;

var
  aSeite: TSeite;
  aSeiten: TSeiten;

aSeite := Oben;
aSeiten := [Oben, Unten, Rechts];
Und aus diesen Sets kann man dann auch ganz einfach wieder Elemente rausnehmen oder dazugeben:
Delphi-Quellcode:
var
  aSeiten: TSeiten;

aSeiten := [Oben, Unten, Rechts];
aSeiten := aSeiten + [Links];
aSeiten := aSeiten - [Oben, Unten];
Die andere Möglichkeit "Untereigenschaften" zu erstellen ist mit einem Nachfahren von TPersistent, aber das hab ich in diesem Thread schon mal genauer erklärt: http://www.delphipraxis.net/internal...ect.php?t=9321

phlux 13. Okt 2003 16:17

Re: Property mit mehreren Eigenschaften gleichzeit??
 
:hi:
Merci, hat funktioniert :jump:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 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