![]() |
Re: Propertys zusammenfassen
1. Anlegen vor dem inherited braucht nicht sein, macht hier keinen Unterschied.
2. Ableiten von TPersistent (wurde hier schon erwähnt) 3. Assign() überschreiben und implementieren (Pflicht). 4. Diese Klasse über eine Property veröffentlichen und beim Setter nur Assign(Value) aufrufen. |
Re: Propertys zusammenfassen
Zitat:
|
Re: Propertys zusammenfassen
Zitat:
|
Re: Propertys zusammenfassen
Zitat:
Wie kann ich nun auf änderungen der farben eingehen ohne für jede farbe eine eigene Set...(value : TColor) procedure zu schreiben. ich hab probiert auf das ändern der Property zu reagieren aber leider ändert sich die nicht, wenn sich die farbe ändert. Dieses Assign was genau bewirkt dass? gruß snow |
Re: Propertys zusammenfassen
ansonsten würde ich bei vielen Properties vom gleichen Typ folgendes Konstrukt bevorzugen
Delphi-Quellcode:
Man kommt mit einer Get/Set-Proc. aus, kann die Daten auf einen Schlag kopieren, per Schleife sichern und wiederherstellen,
TMyClass = class
private FData: array[0..5] of TColor; function GetData(const AIndex: Integer): TColor; procedure SetData(const AIndex: Integer; const Value: TColor); published property colColor1: TColor Index 0 read GetData write SetData; property colColor2: TColor Index 1 read GetData write SetData; ist nur ein Vorschlag! |
Re: Propertys zusammenfassen
Und das geht im OI? Ohne Property-Editor?
|
Re: Propertys zusammenfassen
>> Änderungen werden nicht übernommen:
Du kannst jeweils in deiner Unterklasse einen Setter schreiben und der kann dann (wenn nötig, also die geänderte Farbe sichtbar ist) das neuzeichnen der Oberkomponente auslösen. >> Viele Setter Du kannst für viele Properties gleichen Typs einen einzigen Setter und auch Getter nutzen. Schau dir dazu mal das Schlüsselwort ![]() >> Was soll Assign() Dort übernimmst du alle Werte von der übergebenen Unterkomponenteninstanz, wenn diese angegeben wird. Der Objektinspektor benutzt diese Methode u.a. wenn du mehrere gleiche Objekte markierst und mit Enter die Eigenschaften von einer auf viele übernehmen willst. >> Das geht ohne Property Editor Ja, ohne Probleme. TPersistent bringt dazu alles nötige mit und wird unterstützt. Man muss (neben TPersistent als Basis und Assign() überschreiben) nicht viel dazu implementieren. Wir reden hier aber von den aufklappbaren Unterpunkten. Einen Propertyeditor brauchst du z.B. wenn du eine Listenklasse veröffentlichst, dann hast du schlecht eine Chance ohne Property Editor auszukommen, da du nicht abhängig von den Einträgen Properties definieren kannst. |
Re: Propertys zusammenfassen
Zitat:
Mir fallen viele Dinge ein, ohne das man von schlechten Stil sprechen kann, zBsp. eine Klasse in einer Klasse, die im Konstruktor des Parentteil bestimmte Dinge setzt, aber in der letztendlichen Klasse von einer Grundklasse abgeleitet wurde, usw. usf. |
Re: Propertys zusammenfassen
Zitat:
|
Re: Propertys zusammenfassen
Hallo,
ich verwende für "Subproperties" folgende Standartvorlage
Delphi-Quellcode:
TMyPersistent = class(TPersistent)
private FColor : TColor; FOnChange : TNotifyEvent; procedure SetColor(Value : TColor); protected procedure DoChange; virtual; public constructor Create; destructor Destroy; override; procedure Assign(Source : TPersistent); override; property OnChange : TNotifyEvent read FOnChange write SetOnChange; published property Color : TColor read FColor write SetColor; end; procedure TMyPersistent .SetColor(Value : TColor); begin If FColor<>Value then begin FColor:=Value; DoChange; end; end; procedure TMyPersistent .DoChange; begin If Assigned(FOnChange) then FOnChange(Self); end; procedure TMyPersistent.Assign(Source : TPersistent); override; begin If Source is TMyPersistent then begin FColor:=TMyPersistent(Source).Color; end; inherited Assign(Source); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 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