Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Default bei property in Komponente funktioniert nicht


Tendl - Do 18.03.04 17:56
Titel: Default bei property in Komponente funktioniert nicht
Ich habe eine einfache nicht visuelle Komponente entwickeln wollen,
deren Hauptaufgabe es ist über eine DLL zu kommunizieren. Im wesentlichen funktioniert auch alles, ich habe nur folgendes Problem:

Die Komponente schaut folgendermaßen aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  TNew = class(TComponent)
  private
    { Private declarations }
    fport: byte;
  published
    { Published declarations }
    property port: byte read FPort write FPort default 1;
  end;


Ich erwarte mir jetzt eigentlich, daß wenn ich die Komponente aus der der Palette auf
mein Formular ziehen im Objectinspector eine 1 in der Eigenschaft Port. Leider ist dort
immer wieder nur eine Null zufinden.

Die Komponente befindet sich in der dclusr, also der Standartlib für eigene Erweiterungen.
Neucompilieren der Lib hat mich nicht weiter gebracht, auch das Entfernen der Komponente
aus der Lib und das Neueinfügen nicht.

Was mache ich falsch???

Danke
Thomas


Tryer - Do 18.03.04 19:05
Titel: Re: Default bei property in Komponente funktioniert nicht
Tendl hat folgendes geschrieben:
Ich erwarte mir jetzt eigentlich, daß wenn ich die Komponente aus der der Palette auf
mein Formular ziehen im Objectinspector eine 1 in der Eigenschaft Port.

Man sollte halt manchmal (vor allem wenn einem etwas seltsam vorkommt) in der Hilfe nachschauen.. was das default bewirkt ist dort leicht verständlich erklärt.

".. default 1;" heist nur das die Property so sie denn den Wert 1 hat nicht in der dfm-Datei abgelegt wird, initialisiert wird sie trotzdem mit der für Byte-Variablen typischen 0.
Wenn Du da eine 1 erwartest must Du diese selber setzen, z.b. im Constructor.

MfG,
Tryer


Tendl - Mo 22.03.04 10:10

Danke,
für die Erklärung, den Vorwurf muß ich wohl einstecken, aber jetzt habe ich das endlich
kapiert.

Thomas


Tendl - Di 23.03.04 14:13

War wohl doch nichts:

Wenn ich die Zeile

Delphi-Quelltext
1:
    fPort   := 1;                    


in den constructor Create einfüge verändert sich das Verhalten nicht. Ich habe verchiedenes probiert bis hin zum kompletten Entfernen der Komponente aus der Palette, trotzdem steht die Property nach dem Einfügen der Komponente auf der Form stets auf 0.

Kann mir jemand weiter helfen?

Thomas


iGoA - Di 23.03.04 14:16

Sowas hatte ich auch neulich. Probier mal das entsprechende Package komplett neu zu kompilieren und danach Deine Komponente auf ein neues Formular zu ziehen (so, dass der Konstruktor aufgerufen wird).


MaxiTB - Di 23.03.04 14:16

Eigentlich müßte es gehen ... es gibt zwar noch das Schlüsselwort stored, aber so genau hab ich mich mit dem Thema auch noch nicht beschäftigt.


Motzi - Di 23.03.04 14:31

iGoA hat es bereits angesprochen... du musst das Package in dem die Komponente installiert ist neu kompilieren.. dann sollte es gehen..!


Tendl - Di 23.03.04 15:36

Den Gedanken hatte ich auch schon.

Also ich habe neu compiliert, Kein Erfolg.
Die Komponenten komplett aus der Lib entfernt und neu kompiliert, damit wurde dann auch die Komponente von der Palette entfernt, Delphi geschlossen, dann wieder geöffnet. das Projekt ohne die Komponente (ebenfalls von TForm gelöscht) compiliert, was natürlich zu Fehlern führt, da die Komponente fehlt. Delphi wieder geschlossen und die *.dfm Datei kontrolliert, keine Spur mehr von der Komponente vorhanden. Dann habe ich Delphi wieder geöffnet, die Komponte neu im Package installiert. Im nächsten Schritt habe ich die Komponente wieder TForm hinzugefügt. Leider war der Initialwert wieder nicht die erwartete Eins sondern Null.

Thomas


iGoA - Di 23.03.04 16:18

Hast Du mal versucht, die Komponente auf ein Formular eines komplett neuen Projekte zu packen? Vielleicht sind in Deinem Testprojekt irgendwelche "Leichenteile".


Tendl - Di 23.03.04 16:45

Habe ich gerade auf Deinen Tip hin versucht, mit dem identischen Ergebnis
Port bleibt auf Null