AGB  ·  Datenschutz  ·  Impressum  







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

Standardwert einer Eigenschaft

Ein Thema von Cicaro · begonnen am 22. Feb 2005 · letzter Beitrag vom 28. Feb 2005
Antwort Antwort
Seite 1 von 3  1 23      
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#1

Standardwert einer Eigenschaft

  Alt 22. Feb 2005, 11:56
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#2

Re: Standardwert einer Eigenschaft

  Alt 22. Feb 2005, 12:02
schau mal nach ComponentState, mir war so das es damit ging...

ca so:

if ([csDesigning] in ComponentState) then...
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#3

Re: Standardwert einer Eigenschaft

  Alt 22. Feb 2005, 12:33
Hab' das schon ausprobiert. Hilft nicht. Die eingestellten Werte müssen doch aus einer der Projektdateien geladen weden.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Standardwert einer Eigenschaft

  Alt 22. Feb 2005, 12:34
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
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Standardwert einer Eigenschaft

  Alt 22. Feb 2005, 12:41
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.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#6

Re: Standardwert einer Eigenschaft

  Alt 22. Feb 2005, 12:44
@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:

instanz[1]... ohne:

instanz.blah[1]
schreiben zu müssen
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#7

Re: Standardwert einer Eigenschaft

  Alt 22. Feb 2005, 12:46
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.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Standardwert einer Eigenschaft

  Alt 22. Feb 2005, 12:46
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
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#9

Re: Standardwert einer Eigenschaft

  Alt 22. Feb 2005, 13:03
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.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

Re: Standardwert einer Eigenschaft

  Alt 22. Feb 2005, 13:05
Hi Leute,

au weia, ihr seid ja ganz verwirrt!

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 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
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 17:42 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