AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Einer Variablen einer Oberklasse einen Wert zuweisen
Thema durchsuchen
Ansicht
Themen-Optionen

Einer Variablen einer Oberklasse einen Wert zuweisen

Offene Frage von "peterbelow"
Ein Thema von enigma · begonnen am 17. Jan 2022 · letzter Beitrag vom 18. Jan 2022
 
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
711 Beiträge
 
Delphi 12 Athens
 
#5

AW: Einer Variablen einer Oberklasse einen Wert zuweisen

  Alt 18. Jan 2022, 12:51
Hallo zusammen,

ich habe als Oberklasse ein Formular TBaseWizard mit der Höhe (Height) als Variable.
Als Unterklasse steht TfrmWizard = class(TBaseWizard), dessen Height eben kleiner als die von
WizForm := TfrmWizard.Create sein soll.

Wenn ich in TfrmWizard.Create folgendes durchführe, bleibt die Höhe von BaseWizard unverändert:
Delphi-Quellcode:
  BaseWizard := TBaseWizard.Create(AOwner, InputFinished);
  inherited Create(AOwner, InputFinished);
  BaseWizard.Height := 2200;
In TBaseWizard.Create gilt: Height := 650;
Du hast noch nicht so ganz verstanden wie Vererbung funktioniert. Dein TfrmWizard erbt alles von TBaseWizard, nach der Zeile
inherited Create(AOwner, InputFinished); hat Height den Wert, den der Constructor von TBaseWizard setzt (oder aus der Form-Resource lädt). Um die Height zu ändern verwendest Du einfach

Height := 2200; Es gibt in deinem Beispiel keine separate Instanz von TBaseWizard als Teil von TfrmWizard, was Du da erzeugst ist ein komplett separates Objekt der Klasse TBaseWizard die absolut nichts mit der Instanz von TfrmWizard zu tun hat in deren Constructor Du gerade bist. Jede Instanz von TfrmWizard ist auch eine Instanz von TBaseWizard und enthält alles, was in TBaseWizard deklariert ist.

Bei der Vererbung von Designer-Objekten (Forms, Frames, Datamodules) gibt es übrigens noch ein Detail zu beachten, das bei anderen Klassen nicht relevant ist:
Um eine von einer Designer-Klasse abgeleitete Klasse zu erzeugen muss man über das Menu File -> New -> Other... den Repository-Dialog aufrufen, dort auf die Seite "inheritable items" gehen und die gewünschte Basisklasse dort auswählen. Die IDE erzeugt dann eine Kode-Unit und das zugehörige DFM-File für die abgeleitete Klasse.
Wenn man die Ableitung im Kode macht fehlt das DFM-File, oder, wenn man die Basisklasse einer existierenden Klasse ändert, ist das DFM-File nicht korrekt aufgebaut. Für eine direkt von TForm, TFrame oder TDatamodule abgeleitete Klasse beginnt das DFM-File mit dem Keyword "object", für per visual form inheritance erzeugt Klassen (wie vorstehen beschrieben) aber mit "inherited". Das informiert den Kode, der eine Instanz aus der DFM-Resource initialisiert, darüber, dass er zuerst die Resource der Basisklasse laden muß und danach dann die der abgeleiteten Klasse. Dann funktioniert auch das Ändern von Eigenschaften der Basisklasse in der abgeleiteten Klasse im Designer.
Peter Below
  Mit Zitat antworten Zitat
 

 

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 02:59 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