Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

Jasocul 22. Feb 2005 12:10

Re: Standardwert einer Eigenschaft
 
Zitat:

Zitat von Binärbaum
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 :?:

Schon, aber der einzige Unterschied zum Source von Cicaro war das "default". Den Rest hatte ich nur zur Vollständigkeit geschrieben.

Das mit der Speicherung im DFM wusste ich nicht. Bringt zumindest beim Arbeiten mit Default-Werten ein bisschen Performance. Zumindest theoretisch.

Binärbaum 22. Feb 2005 12:11

Re: Standardwert einer Eigenschaft
 
Zitat:

Zitat von Cicaro
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:

Meines Erachtens wird das bei allen Komponenten so gemacht (zumindest sollte man es so machen). Den Zweck des default-Schlüsselwortes hat maximov ja schon erklärt. Daraus folgt, dass man im OnCreate immer den Standardwert setzen muss. Sonst funktioniert es nicht. (Außer wenn der Standardwert null ist, dann geht es evtl., aber darauf würde ich mich nicht verlassen :zwinker: )

MfG
Binärbaum

Stevie 22. Feb 2005 12:16

Re: Standardwert einer Eigenschaft
 
Zitat:

Zitat von Binärbaum
Daraus folgt, dass man im OnCreate immer den Standardwert setzen muss.

Lässt du wohl die Finger vom OnCreate-Event!!! :roll:
Das event ist dafür da, etwas auszuführen, was der Benutzer deiner Komponente nach ihrem Erstellen tun möchte.

Pseudemys Nelsoni 22. Feb 2005 12:17

Re: Standardwert einer Eigenschaft
 
Das Problem ist aber, das das Create (zur laufzeit) der im OI gesetzten eigenschaft wieder durch die im OnCreate überschreibt...

Cicaro 22. Feb 2005 12:21

Re: Standardwert einer Eigenschaft
 
Zitat:

Zitat von Binärbaum
(Außer wenn der Standardwert null ist, dann geht es evtl., aber darauf würde ich mich nicht verlassen)

Das versteh' ich nicht.

Aber in der Delphi-Hilde steht:
Zitat:

Die optionalen Direktiven stored, default und nodefault sind Speicherbezeichner. Sie haben keinerlei Auswirkungen auf die Funktionsweise des Programms, sondern bestimmen, ob die Werte der published-Eigenschaften in Formulardateien gespeichert werden.
Bei mir werden die besagten Werte zur Runtime nicht geladen.

Pseudemys Nelsoni 22. Feb 2005 12:25

Re: Standardwert einer Eigenschaft
 
Zitat:

Zitat von Pseudemys Nelsoni
schau mal nach ComponentState, mir war so das es damit ging...

ca so:

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



so gehts doch -____-....

Stevie 22. Feb 2005 12:38

Re: Standardwert einer Eigenschaft
 
Sorry Leute, aber das ist doch alles Quatsch!!! :stupid:

Delphi-Quellcode:
unit MyComponent;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics;

type
  TMyComponent = class(TComponent)
  private
    FColor: TColor;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property Color: TColor read FColor write FColor default clBlack;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TMyComponent]);
end;

{ TMyComponent }

constructor TMyComponent.Create(AOwner: TComponent);
begin
  inherited;
  FColor := clBlack;
end;

end.
Designzeit:
- Platzieren der Komponente auf dem Formular --> Aufruf des Konstruktors (setzen der Standard-Werte durch Source im Create)
- Speichern des Formulars (Eigenschaften, die mit dem Default-Wert übereinstimmen, werden nicht gespeichert)
- Ändern der Eigenschaft
- Erneutes Speichern (Eigenschaften, die vom Default-Wert abweichen werden gespeichert)

Laufzeit:
- Erzeugen des Formulars --> Aufruf des Konstruktors
- Laden der dfm-Datei --> erzeugen aller auf dem Formular liegenden Komponenten --> Aufruf des Konstruktors jedes einzelnen --> Setzen der Eigenschaftswerte aus der Formulardatei
- Aufruf des OnCreate-Events des Formulars

Ich hoffe, das hilft etwas aus dieser allgemeinen Ratlosigkeit heraus. :wink:

Wer Interesse hat, sollte sich eingehender mit dem Resourcen-Streaming-System von Delphi beschäftigen. Dann kommen auch so Sachen, wie ComponenteState zum Tragen, die hier noch nix zu suchen hatten. Das wird nur benutzt, wenn z.B. im Konstruktor etwas gemacht wird, was nur zur Laufzeit geschehen soll (z.B. Öffnen einer Verbindung zur Datenbank oder so).

MfG
Stevie

IngoD7 22. Feb 2005 12:41

Re: Standardwert einer Eigenschaft
 
Zitat:

Zitat von Pseudemys Nelsoni
Das Problem ist aber, das das Create (zur laufzeit) der im OI gesetzten eigenschaft wieder durch die im OnCreate überschreibt...

Nur mal so zwischengefragt: Ihr vermischt aber jetzt nicht zufällig das Ereignis OnCreate mit dem Konstruktor???

Binärbaum 22. Feb 2005 13:04

Re: Standardwert einer Eigenschaft
 
Zitat:

Zitat von IngoD7
Nur mal so zwischengefragt: Ihr vermischt aber jetzt nicht zufällig das Ereignis OnCreate mit dem Konstruktor???

Doch, leider. Mit dem Create meinte ich eigentlich den Konstruktor, nicht das Ereignis OnCreate. :roll:

Cicaro 23. Feb 2005 18:33

Re: Standardwert einer Eigenschaft
 
Sorry, Leute aber mein Problem lag woanders, weshalb ich auch mit den Default-Wert Probleme hatte.
Jetzt ist alles klar. Die meisten von euch hatten auch recht. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 Uhr.
Seite 2 von 3     12 3      

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