Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Default-Wert in Vererbung ändern (https://www.delphipraxis.net/160448-default-wert-vererbung-aendern.html)

stahli 13. Mai 2011 14:14

Delphi-Version: XE

Default-Wert in Vererbung ändern
 
Ich habe eine Ableitung von einem Panel und möchte dort Alignment standardmäßig auf taLeftJustify ändern:
Im Constructor würde ich Alignment entsprechend auch so setzen.

Delphi-Quellcode:
  TMyPanel = class(TPanel)
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Alignment: TAlignment {read GetAlignment? write SetAlignment?} default taLeftJustify;
  end;

Lässt sich das machen? Der Compiler verlangt Getter und Setter. Diese sind jedoch nicht virtuell und FAlignment ist privat.
Gibt es dafür einen Weg?

guinnes 13. Mai 2011 14:17

AW: Default-Wert in Vererbung ändern
 
Setz das Alignment einfach in deinem Konstruktor.

Deep-Sea 13. Mai 2011 14:41

AW: Default-Wert in Vererbung ändern
 
  1. Du darfst bei so etwas auch den Typ nicht mit angeben, dann sollte es gehen:
    Delphi-Quellcode:
    property Alignment default taLeftJustify;
  2. Bedenke, dass das setzen eines Default-Wertes bei einer Property den Werte NICHT ändert, sondern nur für die Anzeige im OI und der bedingten Speicherung eventueller Änderungen in der dfm dient.

himitsu 13. Mai 2011 14:42

AW: Default-Wert in Vererbung ändern
 
Delphi-Quellcode:
published
  property Alignment default taLeftJustify;
end;
:?:

[add/edit]
Wird eine Property verschoben (z.B. von protected nach public) oder werden eigenschaften verändert, dann gibt man den Typen nicht mehr an (den Typen kann man eh nicht mehr ändern).

Und wo kommt denn der Post auf einmal her? :shock:
@2: Jupp, das wird nur dafür genutzt, ob der Wert im IO fett dargestellt wird und ob das Property z.B. in der DFM gespeichert wird.
Ist aktueller Wert = Default, dann ist der dünngeschrieben und wird nicht gespeichert.

Den Startwert, welcher zu deinem neuen Default paßt, wirst du eventuell im Constructor setzen müssen.

SirThornberry 13. Mai 2011 16:32

AW: Default-Wert in Vererbung ändern
 
Ihr habt aber schon den ersten Beitrag gelesen oder? ;-) Dort steht doch das er im Constructor den Wert auch entsprechend ändert.
Zitat:

Im Constructor würde ich Alignment entsprechend auch so setzen.

stahli 13. Mai 2011 16:42

AW: Default-Wert in Vererbung ändern
 
Ok, vielen Dank! Ohne Eigenschaftstyp funktioniert es perfekt.
Die IDE hatte vorher immer meine (händischen) Einstellungen zurückgesetzt.

SirThornberry 13. Mai 2011 16:48

AW: Default-Wert in Vererbung ändern
 
zurückgesetzt ist etwas falsch ausgedrückt. Durch den abweichenden Defaultwert wurde der gesetzte Wert einfach nicht gespeichert.

stahli 13. Mai 2011 16:58

AW: Default-Wert in Vererbung ändern
 
[Rechthabermodus]Im Constructor gesetzt und beim Formular laden zurückgesetzt[/Rechthabermodus]
Hmm, obwohl ... Zumindest wurde die Einstellung im Objektinspektor mit dem compilieren bzw. auch nach dem Projekt öffnen von taCenter auf taLeftJustify zurück gesetzt.
Im Construktor wurde Left eingestellt, im Formular wurde aber Center als Standardwert vorgegeben.

Aber es ist ja auch gelöst! :thumb:

himitsu 13. Mai 2011 20:09

AW: Default-Wert in Vererbung ändern
 
Nja, Delphi speichert den Defaultwert nicht.
Beim Laden wird erst der Constructor ausgeführt, dort wird ja irgendwas voreingestellt und wenn nun die DFM geladen wird, dann bleibt der Wert unverändert, da er ja der alte Wert nicht in der DFM gespeichert wurde.

Die Default-Angabe hat praktisch zwei drei Auswirkungen:
- die DFM wird kleiner, da nur Veränderungen gepseichert werden (also nur Abweichungen vom Standard)
- der Programmierer hat im OI eine Anzeige was verändert ist
- bei Array-Property hat Default allerdings eine ganz andere Wirkung (siehe OH)

PS: bezüglich dem Speichern gibt es noch "stored", damit kann man etwas ganz von der Speicherung ausschließen, mit False (gut für berechnete Felder) oder man gibt dort eine Funktion an.

madtom 13. Mai 2011 20:23

AW: Default-Wert in Vererbung ändern
 
Hallo,

warum so kompliziert? Es gibt seit längeren in Delphi die Möglichkeit,
Komponentenvorlagen (Component Templates) zu erzeugen:

Einfach ein Panel auf dem Formular plazieren, die gewünschten Eigenschaften im OI
einstellen und über Kompenten | Komponentenvorlage erzeugen ...
die abgeleitete Komponente registrieren.

Danach ist sie zu verwenden, wie jede andere Komponente auch, mit dem Vorteil,
die Settings nicht immer wieder neu eingeben zu müssen.

madtom :-D


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