Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Standardwert einer Eigenschaft (https://www.delphipraxis.net/40864-standardwert-einer-eigenschaft.html)

Cicaro 22. Feb 2005 10:56


Standardwert einer Eigenschaft
 
Hallo!

Wenn ich Eigenschaften in meinen Komponenten erstelle, mache ich es folgendermaßen:

Delphi-Quellcode:
private
  FMyColor:TColor;
published
  MyColor:TColor read FMyColor write FMyColor;
end;
und so setze ich den Standardwert:

Delphi-Quellcode:
constructor TMyComp.Create(Owner:TComponent);
begin
  inherited Create(Owner);

  FMyColor:=$FF;
end;
Dabei taucht ein Problem auf. Der Wert, den man zur Entwurfszeit einstellt, wird beim Ausführen des Programms (wohl wegen der Create-Prozedur) zurückgesetzt.

Kann man dies verhindern und dennoch einen Standardwert angeben ?

Pseudemys Nelsoni 22. Feb 2005 11:02

Re: Standardwert einer Eigenschaft
 
schau mal nach ComponentState, mir war so das es damit ging...

ca so:

Delphi-Quellcode:
if ([csDesigning] in ComponentState) then...

Cicaro 22. Feb 2005 11:33

Re: Standardwert einer Eigenschaft
 
Hab' das schon ausprobiert. Hilft nicht. Die eingestellten Werte müssen doch aus einer der Projektdateien geladen weden.

Binärbaum 22. Feb 2005 11:34

Re: Standardwert einer Eigenschaft
 
Kann man den Standardwert nicht folgendermaßen setzen:
Delphi-Quellcode:
private
  FMyColor:TColor;
published
  MyColor:TColor read FMyColor write FMyColor default $FF;
end;

...

constructor TMyComp.Create(Owner:TComponent);
begin
  inherited Create(Owner);
  FMyColor:=$FF;
end;
MfG
Binärbaum

Jasocul 22. Feb 2005 11:41

Re: Standardwert einer Eigenschaft
 
imho ist das "default" ohne Wirkung. Irgendwo in der OH steht das drin, glaube ich. Man muss den Default-Wert ins Create des Objektes packen.

Pseudemys Nelsoni 22. Feb 2005 11:44

Re: Standardwert einer Eigenschaft
 
@Binärbaum: Soweit ich weiss kann man "default" nur 1mal anwenden und das ist dann z.b für ein array wo du nach setzten der "default" direktive ein objekt direkt indizieren kannst ohne dessen array anzusprechen....

sagen wir mal "blah" ist ein array und is "default" in einem objekt)...dann könntest du das array so ansprechen:

Delphi-Quellcode:
instanz[1]...
ohne:

Delphi-Quellcode:
instanz.blah[1]

schreiben zu müssen

Cicaro 22. Feb 2005 11:46

Re: Standardwert einer Eigenschaft
 
Zitat:

Zitat von Binärbaum
Kann man den Standardwert nicht folgendermaßen setzen:
Delphi-Quellcode:
private
  FMyColor:TColor;
published
  MyColor:TColor read FMyColor write FMyColor default $FF;
end;

...

constructor TMyComp.Create(Owner:TComponent);
begin
  inherited Create(Owner);
  FMyColor:=$FF;
end;

Nein !
Außerdem setzt du im Constructor (auch zur Runtime) den Wert nochmal, wenn die Komponente erstellt wird. Der soll aber aus dem Design übernommen werden.

Wenn man das Setzen des Wertes im Constr. weglässt steht da 0. :wall:

Binärbaum 22. Feb 2005 11:46

Re: Standardwert einer Eigenschaft
 
Zitat:

Zitat von Jasocul
imho ist das "default" ohne Wirkung. Irgendwo in der OH steht das drin, glaube ich. Man muss den Default-Wert ins Create des Objektes packen.

Steht es bei mir etwa nicht im OnCreate :?:

maximov 22. Feb 2005 12:03

Re: Standardwert einer Eigenschaft
 
Zitat:

Zitat von Binärbaum
Kann man den Standardwert nicht folgendermaßen setzen:
Delphi-Quellcode:
private
  FMyColor:TColor;
published
  MyColor:TColor read FMyColor write FMyColor default $FF;
end;

...

constructor TMyComp.Create(Owner:TComponent);
begin
  inherited Create(Owner);
  FMyColor:=$FF;
end;
MfG
Binärbaum

Das ist das korrekte vorgehen! Das default ist nur ein attribut, das dem DFM-system mitteilt welchen wert es als standardwert zu betrachten hat und somit nicht speichern braucht. Den wert muss dann folglich auch im konstruktor zuweisen.

@Nelsoni: Du verwechselst das mit der standard-eigenschaft einer klasse!

Ich frag mich warum es da probleme gibt? Vielleicht nochmal den sachverhalt genau untersuchen oder schildern.

Stevie 22. Feb 2005 12:05

Re: Standardwert einer Eigenschaft
 
Hi Leute,

au weia, ihr seid ja ganz verwirrt! ;-)

Zitat:

Zitat von Die Online-Hilfe
Die optionalen Direktiven stored, default und nodefault sind Speicherangaben. Sie haben keinerlei Auswirkungen auf die Funktionsweise des Programms, sondern steuern lediglich die Verwaltung der Laufzeit-Typinformationen (RTTI). Genauer gesagt bestimmen sie, ob die Werte der published-Eigenschaften in Formulardateien gespeichert werden.

Das heißt, wenn du im OI den default-Wert einträgst, wird die Eigenschaft nicht in der dfm gespeichert.
Zitat:

Zitat von Die Online-Hilfe
Standardmäßig speichert eine Komponente die Werte aller als public und published deklarierten Eigenschaften in der Reihenfolge ihrer Deklaration. Beim Laden baut sich die Komponente zunächst selbst auf, indem sie alle Eigenschaften auf die Standardwerte setzt. Erst dann werden die gespeicherten, von der Vorgabe abweichenden Werte gelesen.

Damit dürfte klar sein, dass erst der Konstruktor aufgerufen wird, und erst dann die Eigenschaften aus der dfm geladen werden!
Das heißt, wenn du keinen default-Wert in der property angibst, wird der Wert, den du im OI einträgst (oder auch der, der beim Platzieren der Komponente durch den Konstruktor gesetzt wird) auf jeden Fall in der dfm gespeichert. Zur Laufzeit wird erst die Komponente erstellt (beim Laden des Formulars) und dann mit den Eigenschaften aus der dfm bestückt.

MfG
Stevie


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 Uhr.
Seite 1 von 3  1 23      

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