AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Problem mit Speicherbezeichner "default" bei Properties
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Speicherbezeichner "default" bei Properties

Ein Thema von skyobserver · begonnen am 18. Jul 2007 · letzter Beitrag vom 23. Jul 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von skyobserver
skyobserver

Registriert seit: 18. Mai 2005
Ort: Ense
114 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#11

Re: Problem mit Speicherbezeichner "default" bei P

  Alt 20. Jul 2007, 18:09
@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:
Eigenschaftswerte werden nicht automatisch auf den Standardwert initialisiert, d. h. die Standarddirektive steuert nur das Speichern von Eigenschaftswerten in die Formulardatei und nicht das Speichern des ersten Werts der Eigenschaft in einer neu erstellten Instanz.
Die größte Enttäuschung für einen Perfektionisten ist die Realität
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#12

Re: Problem mit Speicherbezeichner "default" bei P

  Alt 21. Jul 2007, 10:42
Zitat von skyobserver:
Mit welchen Schritten leite ich den mein TestForm (mit DFM) so
ab das "inherited" statt "object" in der DFM steht?
An genau diesem Punkt :

Zitat von skyobserver:
5. Datei-> Neu -> Weitere -> TestForm (kopieren) -> OK
Noch nichr gesehen, dass unten neben "kopieren" auch "vererben" steht ? Würde mich allerdings nicht wundern, wenn das grau und somit nicht enabled ist.
Gruß
Hansa
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: Problem mit Speicherbezeichner "default" bei P

  Alt 21. Jul 2007, 14:35
Zitat von skyobserver:
Mit welchen Schritten leite ich den mein TestForm (mit DFM) so
ab das "inherited" statt "object" in der DFM steht?
Da du des nun schon kopiert hast: Auf der Form einen Rechtsklick und "Anzeige als Text" und dort dann das erste "object" durch "inherited" in der ersten Zeile ersetzen. Danach wieder Rechtsklick und "Anzeige als Formular".

Beachte, dass deine Basisform eine DFM benötigt!

Zitat von skyobserver:
Wo soll denn der Default-Wert herkommen? Jedenfalls nicht von "default True":

Delphi-OH:
Zitat:
Eigenschaftswerte werden nicht automatisch auf den Standardwert initialisiert, d. h. die Standarddirektive steuert nur das Speichern von Eigenschaftswerten in die Formulardatei und nicht das Speichern des ersten Werts der Eigenschaft in einer neu erstellten Instanz.
Aus deinem Constructor. Wie die Hilfe schon schreibt legt die Angabe von "default xxx" bei den Properties nicht den Wert der Property nach erstellen fest. Du musst der Angabe entsprechend die Property initialisieren und das bedeutet dann im Constructor das True auf die interne Variable zu setzen. Die Default Angabe hilft dem Streaming System nur zu entscheiden ob er die Eigenschaft schreiben muss oder nicht (bzw. der OI nutzt gleiches für seine Darstellung von wegen fett oder normal).
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#14

Re: Problem mit Speicherbezeichner "default" bei P

  Alt 21. Jul 2007, 15:46
Zitat von Muetze1:
Da du des nun schon kopiert hast: Auf der Form einen Rechtsklick und "Anzeige als Text" und dort dann das erste "object" durch "inherited" in der ersten Zeile ersetzen. Danach wieder Rechtsklick und "Anzeige als Formular".
Besser wäre es wohl, das Programm nicht noch weiter von Hand zu verunstalten. Sobald die Form im Repository liegt, kann man sie doch schnell vererben. Zumindest wenn man nicht wie üblich unten auf kopieren klickt sondern auf vererben, wie bereits gesagt. In einer hierarchischen Struktur an Forms ist es tödlich da mittendrin in den DFMs rumzupfuschen. Bei einer Form ist das nicht wichtig, eher überflüssig. Ab zwei wirds aber immer interessanter diese Technik auch zu benutzen. Bei >10 ähnliche Forms, selbst wenn sie nicht so sehr viel gemeinsam haben ist es IMHO ein Muss.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von skyobserver
skyobserver

Registriert seit: 18. Mai 2005
Ort: Ense
114 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#15

Re: Problem mit Speicherbezeichner "default" bei P

  Alt 21. Jul 2007, 17:13
@Muetze1: Was denn nun???

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)
Zitat:
Du musst der Angabe entsprechend die Property initialisieren und das bedeutet dann im Constructor das True auf die interne Variable zu setzen
Widerspricht sich das nicht irgendwie...?
Die größte Enttäuschung für einen Perfektionisten ist die Realität
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16

Re: Problem mit Speicherbezeichner "default" bei P

  Alt 21. Jul 2007, 19:24
Das hier :

inherited Create... ist ein Sonderfall, der wirklich nur selten benötigt wird. Damit kann man das original Create der Vorfahren quasi übersteuern und beeinflussen.

Und das :

inherited; guckt in der abgeleiteten Form nach dem nächstmöglichen Vorfahr. Also :

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 inherited; automatisch eingefügt. Da fängts halt schon an.
Gruß
Hansa
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#17

Re: Problem mit Speicherbezeichner "default" bei P

  Alt 21. Jul 2007, 22:39
Zitat von skyobserver:
@Muetze1: Was denn nun???

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)
Zitat:
Du musst der Angabe entsprechend die Property initialisieren und das bedeutet dann im Constructor das True auf die interne Variable zu setzen
Widerspricht sich das nicht irgendwie...?
Nein! Die Betonung meiner ersten Aussage liegt vor allem in dem "vor inherited Create". Du musst die Eigenschaft ihren unter default angegebenen Wert geben, aber bitte nach dem inherited Create Aufruf im Constructor!
  Mit Zitat antworten Zitat
Benutzerbild von skyobserver
skyobserver

Registriert seit: 18. Mai 2005
Ort: Ense
114 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#18

Re: Problem mit Speicherbezeichner "default" bei P

  Alt 23. Jul 2007, 00:49
@Hansa:

Wenn ich die OH richtig interpretiere, dann ist
Delphi-Quellcode:
constructor Create(Owner: TComponent);
begin
  inherited;
end;
mit

Delphi-Quellcode:
cinstructor Create(Owner: TComponent);
begin
  inherited Create(Owner);
end;
absolut identisch!


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...
Die größte Enttäuschung für einen Perfektionisten ist die Realität
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 11:49 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