Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit Vererbung auf Frames (https://www.delphipraxis.net/125221-problem-mit-vererbung-auf-frames.html)

Samufi 2. Dez 2008 19:58


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

mkinzler 2. Dez 2008 20:22

Re: Problem mit Vererbung auf Frames
 
Zeig mal etwas Code

Samufi 2. Dez 2008 20:42

Re: Problem mit Vererbung auf Frames
 
Das ist der Code des erbenden Frames:
Delphi-Quellcode:
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.
Und das der des vererbenden Frames:
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.

mkinzler 2. Dez 2008 20:55

Re: Problem mit Vererbung auf Frames
 
{$R *.dfm}

Samufi 2. Dez 2008 20:59

Re: Problem mit Vererbung auf Frames
 
Stört das?

mkinzler 2. Dez 2008 21:01

Re: Problem mit Vererbung auf Frames
 
Ja, wenn die Datei, die eingebunden werden soll nicht existiert

Samufi 2. Dez 2008 21:08

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?

mkinzler 2. Dez 2008 21:14

Re: Problem mit Vererbung auf Frames
 
Wenn frames.dfm existiert dann kann der Include natürlich bleiben

Samufi 2. Dez 2008 21:21

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...

Bernhard Geyer 2. Dez 2008 21:58

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:
HauptUnit.form1.xxx
zeugen von schlechten Programmdesign. Sorge für eine Lose kopplung zwischen deinen Units/Formularen indem du solche Zugriffe z.B. per Callbacks/Events realisierst.

Samufi 2. Dez 2008 22:08

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...

Bernhard Geyer 2. Dez 2008 22:19

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:
// 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;
und in der Hauptunit:

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;

Bobo1 28. Nov 2012 17:17

AW: Problem mit Vererbung auf Frames
 
Existiert das Problem noch? Es gibt eine Lösung.

mueller_klaus46@yahoo.de


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