![]() |
Frames und Vererbung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe heute mit D7 Pro ein neues Projekt angefangen. Die Oberfläche möchte ich mit Frames realisieren. Weil ich die Konstruktorsignatur erweitern möchte habe ich einen zusätzlich Konstruktor eingefügt. TFrameBase ist der Vorfahre aller Frames.
Delphi-Quellcode:
Jetzt habe einen Nachfahren erzeugt
unit tpm_base_frame;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, tpm_SystemDataprovider_impl, StdCtrls; type TFrameBaseClass = class of TFrameBase; TFrameBase = class(TFrame) private { Private-Deklarationen } FActionIndex : Integer; FSystemDataprovider : TSystemDataprovider; protected property ActionIndex : Integer read FActionIndex; property SystemDataprovider : TSystemDataprovider read FSystemDataprovider; public { Public-Deklarationen } constructor CreateNew(AOwner: TComponent; ActionIndex : Integer; SystemDataprovider : TSystemDataprovider); virtual; end; implementation {$R *.dfm} { TFrameBase } constructor TFrameBase.CreateNew(AOwner: TComponent; ActionIndex: Integer; SystemDataprovider: TSystemDataprovider); begin inherited Create(AOwner); FActionIndex:=ActionIndex; FSystemDataprovider:=SystemDataprovider; end; end.
Delphi-Quellcode:
Bis jetzt habe Delphi noch nicht neu gestartet! Alles läuft einwandfrei.
unit tpm_stammdaten_frame;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, tpm_base_frame; type TFrameStammdaten = class(TFrameBase) private { Private-Deklarationen } public { Public-Deklarationen } end; implementation {$R *.dfm} end. Nach dem ich Delphi geschlossen habe (ohne irgendwelche Fehlermeldungen) und anschließend wieder geöffnet habe erhalten ich beim Laden (also beim Start von Delphi) des Frames TFrameStammdaten folgende Fehlermeldung: Fehler beim Lesen von FrameStammdaten.TabOrder: Eigenschaft TabOrder existiert micht. Fehler ignorieren und fortfahren usw. Wenn ich den Fehler ignoriere siehtder Frame TFrameStammdaten aus wie ein Formualr und im OI erscheinen auch fast alle Eigenschaften und Ereignisse eines TForm. Ich bin völlig ratlos. Woran kann das liegen? Ich habe schon auf den Borlandseiten gesucht und im CodeCentral ein Beispiel gefunden. Dort machen die es aber genauso wie ich. [EDIT]Ich habe mal ein minimales Beispiel angehängt [/EDIT] |
Re: Frames und Vererbung
das passiert, wenn die Eigenschaft "Name" des Frames nicht mit dem Typbezeichner in der Deklaration übereinstimmt (Typbezeichner muß 'T'+Name sein).
Falls dies der Fall ist: Typdeklaration gleich 'T' + <jetziger_Name_des_Frame> setzen ('TFrame1' o.ä.), anschließend Frame in 'FrameStammdaten' bzw. 'FrameBase' umbenennen, der Typbezeichner wird dabei automatisch angepasst. Nachtrag: du könntest einfach auch die *.DFM - Datei bearbeiten und dort die Name-Eigenschaft ändern. |
Re: Frames und Vererbung
Zitat:
Bei TFrameBase ist es analog. |
Re: Frames und Vererbung
o.k., dann gibt es für diesen Fehler wohl mindestens noch eine zweite mögliche Ursache. Die kenn' ich aber leider nicht.
|
Re: Frames und Vererbung
Moin,
ja diesen Fehler hatte ich auch mal. Deklariere einfach in deiner neuen Oberklasse folgendes, dann hast du keine Probleme mehr...
Delphi-Quellcode:
MfG
:
TFrameBase = class(TFrame) private _OldCreateOrder:boolean; _PixelsPerInch:integer; _TextHeight:integer; published property OldCreateOrder:boolean read _OldCreateOrder write _OldCreateOrder; property PixelsPerInch:integer read _PixelsPerInch write _PixelsPerInch; property TextHeight:integer read _TextHeight write _TextHeight; : Thorsten |
Re: Frames und Vererbung
Hallo omata,
vielen Dank. Damit ist der Fehler beim Öffnen des Projektes Zitat:
|
Re: Frames und Vererbung
Hallo Jens,
dein Fehler hörte sich an, wie meiner. Das scheint aber doch anders zu sein. Ich habe mir mal dein Beispiel angesehen. Und da geht es auch ohne irgendwelchen Zusatzcode. Also ich habe folgendes gemacht... 1. Projekt geöffnet. 2. Die beiden Fehlermeldungen mit Ignorieren bestätigt 3. Unit3 geöffnet 4. Unit3 aus der linken oberen Ecke ziehen (irgendwo anders hin) 4. Unit1 auch verschieben (minimal, damit Speichern möglich wird) 5. Projekt speichern, Fehlermeldung mit ja bestätigen fertig. MfG Thorsten |
Re: Frames und Vererbung
Zitat:
Aber egal. Es geht mir hierdrum : Zitat:
|
Re: Frames und Vererbung
Es geht hier nicht um beten. Delphi hat sich irgendwie verschluckt, das bedeutet ich versuche nur einen sinnvollen Weg vorzugeben, mit dem man den Code wieder zum Laufen bekommt.
Dazu gehört eben auch mal das Delphi da erst wieder manipulieren darf, wenn der User einen sinnvollen Weg vorgegeben hat. Und dazu gehört dann auch mal, dass man etwas ignoriert, weil man weiss was man tut. Mir geht es hier um Problemlösungen, deshalb die nachvollziebaren Schritte, wie das Projekt zu retten ist (auch wenn es nur ein leeres Dummy-Projekt ist) Hansa, wenn du keinen Sinn in Frames siehst, dann tust du mir leid. Frames sind einfach nur genial. Sie erhöhen die Übersichtlichkeit von Programmen ungemein. So kann man komplizierte Oberflächen aus kleinen Einzelunits zusammenbauen. Die Einzelunit sind dabei kleiner und dadurch erhöht sich die Programmübersichtlichkeit. Und was ist so schlimm an vererbaren Oberflächenelementen? Stell dir doch mal vor, die Funktionalität in deiner Oberfläche besteht aus vielen immer wieder ähnlichen Funktionen. Dann ist die Vererbung doch sehr interessant, um nicht immer das Rad neu zuerfinden. Also, wenn man etwas weiterdenkt kommen einem schon sinnvolle Ideen für Frames und Vererbung. Man kann damit natürlich auch viel Unsinn machen, aber das gilt wohl für viele Dinge. Man kann natürlich auch auf Frames verzichten und sich das Leben selber schwer machen. |
Re: Frames und Vererbung
Omata : Wiederholung. 8) hierum geht es mir :
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 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-2025 by Thomas Breitkreuz