![]() |
Problem mit Speicherbezeichner "default" bei Prope
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen!
Ich habe ein Problem mit den Properties meines TTestForm welches ich von TForm abgeleitet habe: Es gibt eine published Property "Test" (Boolean). Diese Property soll beim ersten Erstellen einen Default Wert "True" bekommen und fortan den im OI eingestellten Wert speichern. Weiterhin sollte der OI anzeigen ob im Moment der Wert auf standard bzw. nicht standard (Schrift normal bzw. fett) steht. Wenn ich bei der Deklaration der Property "default True" angebe und im Constructor "FTest := True;" setze wird nur zur Laufzeit die Einstellung von "Test" anscheinen nicht mehr geladen. Zur Designzeit ist aber immer der richtige zuletzt gewählte Wert im OI zu sehen. Ohne "default True" und "FTest := True" klappt es (allerdings ist dann immer "False" Vorgabe). Hat Jemand eine Idee was ich falsch mache? Das Form "TestFormObjRep" wird der Objektablage hinzugefügt und dann hinterher mit "kopieren" ins Projekt eingebunden Hier ist mein TestPackage: |
Re: Problem mit Speicherbezeichner "default" bei P
Keiner eine Idee?
|
Re: Problem mit Speicherbezeichner "default" bei P
Zitat:
|
Re: Problem mit Speicherbezeichner "default" bei P
1. TestForm fehlt die DFM (die braucht er immer!)
2. TestFormObjRep ist nicht richtig abgeleitet! Es steht kein "inherited" sondern noch "object" im DFM file. Kann mit 1. zusammen hängen. |
Re: Problem mit Speicherbezeichner "default" bei P
Zitat:
Ralf |
Re: Problem mit Speicherbezeichner "default" bei P
@Muetze1: Danke, werde ich am Abend mal testen
@Alfi001: Zuerst dachte ich auch das Problem wäre der Zeitpunkt wann ich die Property abfrage (habe daher schon versucht "Loaded" zu überschreiben). Wenn ich einen Button auf das Form setze und bei "ButtonClick" in Abhängigkeit von "Test" ein ShowMessage('True' bzw. 'False') ausgebe müßte die Property auf jeden Fall geladen sein bevor ich den Button anklicken kann - aber genau das klappt schon nicht. -Ich öffne das Projekt in Delhi und im OI ist der richtige Wert gesetzt! -Ich starte das Projekt und klicke den Button und die Property ist falsch gesetzt!! Dieser Fehler tritt nicht auf, wenn ich "default True" und "FTest := True" im constructor entferne!!! Diesen Zusammenhang verstehe ich nicht :gruebel: Ich habe entweder meine geänderte Property (aber keinen Default beim ersten Erstellen) oder meinen Default beim ersten Erstellen (aber keine geänderte Property) :evil: Ich weigere mich zu glauben, daß nicht beides gleichzeitig gehen soll gggggrrrrrrrr... :evil: |
Re: Problem mit Speicherbezeichner "default" bei P
Spannender ist die Frage, wann die Property im constructor gesetzt wird, und wann sie aus der Resourcendatei geladen wird.
Ich würde dir empfehlen, dass FTest:=true vor das inherited zu setzen. Es ist nämlich wahrscheinlich, dass im inherited Create auch die Eigenschaften gelesen werden ;) |
Re: Problem mit Speicherbezeichner "default" bei P
Liste der Anhänge anzeigen (Anzahl: 1)
JAWOHL DAS IST ES!!!
"FTest := True" muß vor dem "inherited Create" stehen! :shock: Das Ganze erscheint mir auch irgendwie unglaublich logisch... :shock: :wall: :wall: :wall: :wall: Und ich war mir sicher das schon versucht zu haben... :wall: :wall: :wall: :wall: Habe wohl beim vielen Testen den Überblick verloren... @Hansa: Sorry! Das geht einwandfrei! Danke für alle Hinweise! Mein Glaube an Delphi wurde erneuert - mein Leben hat wieder einen Sinn! Also hier das ganze nochmal als Download so wie es richtig ist! 1. Package compilieren 2. Package installieren 3. TestFormObjRep Form mit rechts anklicken und "Der Objektablage hinzufügen" 4. Neues Projekt erstellen 5. Datei-> Neu -> Weitere -> TestForm (kopieren) -> OK |
Re: Problem mit Speicherbezeichner "default" bei P
Zitat:
@skyobserver: Meine beiden Anmerkungen mal umgesetzt und alleinig ausprobiert (mit Hinzunehmen deiner im obigen Download auskommentierten Anweisungen)? Das alleine sollte richtig klappen und benötigt kein setzen der Eigenschaft vor inherited Create (noch nie benötigt oder gemacht) |
Re: Problem mit Speicherbezeichner "default" bei P
Zitat:
|
Re: Problem mit Speicherbezeichner "default" bei P
@Muetze1:
Meine Lösung funktioniert zwar - aber wenn der andere Weg "korrekter" ist probiere ich das mal aus... Mit welchen Schritten leite ich den mein TestForm (mit DFM) so ab das "inherited" statt "object" in der DFM steht? Es wird in der Objektablage im Bereich meines Package-Projektes nicht angezeigt... Ich hatte für mein TestFormObjRep mit Datei->Neu->Formular ein Form erstellt, dann die Deklaration "Form1 = class(TForm)" in "Form1 = class(TTestForm)" geändert, gespeichert un dann das Form neu geladen... Wo soll denn der Default-Wert herkommen? Jedenfalls nicht von "default True": Delphi-OH: Zitat:
|
Re: Problem mit Speicherbezeichner "default" bei P
Zitat:
Zitat:
|
Re: Problem mit Speicherbezeichner "default" bei P
Zitat:
Beachte, dass deine Basisform eine DFM benötigt! Zitat:
|
Re: Problem mit Speicherbezeichner "default" bei P
Zitat:
|
Re: Problem mit Speicherbezeichner "default" bei P
@Muetze1: Was denn nun??? :wiejetzt:
Zitat:
Zitat:
|
Re: Problem mit Speicherbezeichner "default" bei P
Das hier :
Delphi-Quellcode:
ist ein Sonderfall, der wirklich nur selten benötigt wird. Damit kann man das original Create der Vorfahren quasi übersteuern und beeinflussen.
inherited Create...
Und das :
Delphi-Quellcode:
guckt in der abgeleiteten Form nach dem nächstmöglichen Vorfahr. Also :
inherited;
Form1 Form2 <---- enthält Prozedur XY Form3 Form4 Form4.Create hat die Methode XY nicht und guckt deshalb im Vorgänger Form3 : nichts. Wer ist da Vorgänger ? Form2 und die enthält Prozedur XY und die wird dann auch benutzt. Selbst wenn Form1 auch eine XY hat, so wird die nicht benutzt. Es sei denn man schreibt bei Form2.XY ins Create noch inherited rein. Mache ich z.B. so, um Variablen ao nach und nach einzuführen und auch zu initialisiern. An der Stelle ist das Spiel aber noch nicht zu Ende. 8) Damit das läuft muss auch Gebrauch von der PROTECTED-Sektion in den Deklarationen der Forms gemacht werden. Ich rate jedenfalls dringend davon ab, die in Delphi aus gutem Grund eingebauten Sachen per Hand zu umgehen oder mit Gewalt zurechtzubiegen. Habe ich z.B. eine Form mit Button in der Obektablage, Dann wird im OnClick-Event bei einer nötigen Änderung schon die Zeile
Delphi-Quellcode:
automatisch eingefügt. Da fängts halt schon an.
inherited;
|
Re: Problem mit Speicherbezeichner "default" bei P
Zitat:
|
Re: Problem mit Speicherbezeichner "default" bei P
@Hansa:
Wenn ich die OH richtig interpretiere, dann ist
Delphi-Quellcode:
mit
constructor Create(Owner: TComponent);
begin inherited; end;
Delphi-Quellcode:
absolut identisch!
cinstructor Create(Owner: TComponent);
begin inherited Create(Owner); end; Die Angabe von "Create(Owner)" im zweiten Fall ist lediglich überflüssig, weil nicht auf irgend eine andere Vorfahren-Methode sondern auf die eigene Vorfahren- Methode (Create) verwiesen wird. Delphi denkt sich also im ersten Fall das "Create(Owner)" selber hinzu... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:12 Uhr. |
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 by Thomas Breitkreuz