![]() |
Problem mit Vererbung auf Frames
Hallo,
ich erstelle einen Frame TFrame1, deklariere und implementiere eine Funktion darin. Dann erstelle ich einen zweiten, weise ihm einen Platz in der Hauptunit und ordne ihn der Klasse Tframe1 zu. Der zweite erbt nun die Funktion des ersten, ist auf der Hauptunit zu sehen, alles funktioniert. Wenn ich jetzt aber mein Projekt schließe und später wieder öffne bekomme ich die Fehlermeldung "Fehler beim Lesen von Frame2.ParentColor: Eigenschaft existiert nicht. [...]". Diesen Fehler kann ich ignorieren, der Frame wird aber von der HauptUnit entfernt. Wenn ich jetzt den Frame wieder einbinden will, kommt die Fehlermeldung "Formular oder Datenmodul kann nicht in ein anderes Formular oder Datenmodul eingefügt werden.". Wenn ich jetzt beispielsweise ParentColor auf "false" setze kommt dieselbe Fehlermeldung. Wisst ihr, wo das Problem liegt? Wenn ja, wisst ihr auch, wie ich den Frame, bei dem die Probleme auftraten wieder nutzbar machen kann? Danke für alles Überlegen, treuergebenst Samufi |
Re: Problem mit Vererbung auf Frames
Zeig mal etwas Code
|
Re: Problem mit Vererbung auf Frames
Das ist der Code des erbenden Frames:
Delphi-Quellcode:
Und das der des vererbenden Frames:
unit gehezu;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, frames; type TFrame2 = class(TFrame3) Ausgeben: TButton; procedure AusgebenClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; implementation {$R *.dfm} procedure TFrame2.AusgebenClick(Sender: TObject); begin Ausgabe('5','6'); end; end.
Delphi-Quellcode:
unit frames;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TFrame3 = class(TFrame) private { Private-Deklarationen } public { Public-Deklarationen } function Ausgabe(Inhalt,Code:String):String; end; implementation uses HauptUnit; function Tframe3.Ausgabe(Inhalt,Code:String):String; var Sender:TObject; begin HauptUnit.form1.Inhalt.Text:=Inhalt; HauptUnit.form1.Code.Text:=Inhalt; HauptUnit.Form1.Frame11.FindekomponenteClick(Sender); {$R *.dfm} end; end. |
Re: Problem mit Vererbung auf Frames
{$R *.dfm}
|
Re: Problem mit Vererbung auf Frames
Stört das?
|
Re: Problem mit Vererbung auf Frames
Ja, wenn die Datei, die eingebunden werden soll nicht existiert
|
Re: Problem mit Vererbung auf Frames
Ich dachte immer, das wäre eine Art Kommentar... :oops: Aber die Datei, die eingebunden ist besteht doch?! :gruebel: Warum muss das dann weg und in welcher Unit muss es weg?
|
Re: Problem mit Vererbung auf Frames
Wenn frames.dfm existiert dann kann der Include natürlich bleiben
|
Re: Problem mit Vererbung auf Frames
Frames.dfm existiert, ich habe es auch schon mit löschen der Zeile probiert, es hat aber nicht geholfen...
|
Re: Problem mit Vererbung auf Frames
AFAIK geht es nur das das letzte Glied der Vererbungskette eine Formularressource einbindet. In allen Basisklassen müssen die dort vorhandenen Controls per Code erzeugt werden.
Nebenbei gemerkt: Konstrukte der Art:
Delphi-Quellcode:
zeugen von schlechten Programmdesign. Sorge für eine Lose kopplung zwischen deinen Units/Formularen indem du solche Zugriffe z.B. per Callbacks/Events realisierst.
HauptUnit.form1.xxx
|
Re: Problem mit Vererbung auf Frames
Wenn ich das jetzt richtig verstanden habe, geht das also nicht... Na gut, ist auch nicht so schlimm, die Funktion kann ich ja auch in jede einzelne Unit kopieren. Trotzdem Danke fürs Antworten. Was das Programmierdesign angeht, da muss ich sowieso noch eine Menge lernen. Mit den beiden genannten Begriffen kann ich im Moment noch gar nichts anfangen, ich werde mich bei Gelegenheit mal damit befassen. Im Moment interessiert mich vor allem, dass es funktioniert...
|
Re: Problem mit Vererbung auf Frames
Gut das du lernen willst. Hier mal die Basisunit umgebaut (soweit ich verstanden habe was du eigentlich machen willst):
Delphi-Quellcode:
und in der Hauptunit:
// Kein Uses mehr auf Hauptunit nötig! Enge kopplung und gegenseitige Referenzierung der Units damit gelöst
type TMyCallBack = function(Sender: TObject; const Inhalt, Code: String): String; TFrame3 = class(TFrame) private FMyCallBack: TMyCallBack; public function Ausgabe(const Inhalt, Code: String): String; property MyCallBack: TMyCallBack read FMyCallBack write FMyCallBack; end; implementation function Tframe3.Ausgabe(const Inhalt, Code: String): String; begin if Assigned(FMyCallBack) then result := FMyCallBack(self, Inhalt, Code) else result := ''; end;
Delphi-Quellcode:
uses
frames; procedure TForm1.OnCreate; begin FMyFrame := TFrame2.Create(self); ... FMyFrame.OnMyCallBack := DoMyCallBack; end; function TForm1.DoMyCallBack(Sender: TObject; const Inhalt, Code: String): String; begin Inhalt.Text:=Inhalt; Code.Text:=Inhalt; Frame11.Findekomponente.Click; end; |
AW: Problem mit Vererbung auf Frames
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 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