Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Vererbung von TDataSet auf einem Frame (https://www.delphipraxis.net/201215-vererbung-von-tdataset-auf-einem-frame.html)

Codehunter 2. Jul 2019 14:09

Vererbung von TDataSet auf einem Frame
 
Hallo!

Ich erstelle ein neues Frame und lege ein Dataset darauf. Das füge ich nun der Objektablage hinzu. Nun erstelle ich ZWEI neue Units A und B mit dem soeben erzeugten Frame als Vorlage.

Wenn ich nun in Unit A beim Dataset den Feldeditor öffne und ein paar Felder hinzufüge, dann erscheinen die auch in Unit B im Dataset. Scheint so als würde die IDE die Felder nicht im DFM der abgeleiteten Frames anlegen sondern im Elternframe. Löschen kann ich die Felder aber NUR in Unit A, nicht in der Eltern-Unit und auch nicht in Unit B. Dann erscheint die Fehlermeldung "Auswahl enthält eine Komponente, die in einem Vorfahr-Formular eingeführt wurde, das nicht gelöscht werden kann.."

Denk ich da jetzt falsch oder gibt es einen Trick, die IDE die Felder im Kind-DFM anlegen zu lassen?

Grüße
Cody

joachimd 2. Jul 2019 14:13

AW: Vererbung von TDataSet auf einem Frame
 
die gehören ja auch zu Unit A ;)
Ich würde einen Frame machen, welcher alle vererbbaren Elemente enthält und dann in davon in Unit A und B ableiten ... damit bleibt die Feldauswahl lokal.

Codehunter 2. Jul 2019 14:15

AW: Vererbung von TDataSet auf einem Frame
 
Zitat:

Zitat von joachimd (Beitrag 1435820)
die gehören ja auch zu Unit A ;)
Ich würde einen Frame machen, welcher alle vererbbaren Elemente enthält und dann in davon in Unit A und B ableiten ... damit bleibt die Feldauswahl lokal.

Versteh ich grad nicht. Weil eigentlich hab ich genau das gemacht.

EDIT: Nennen wir die Unit vom Elternformular mal "uMama.pas" und die beiden abgeleiteten Units "uKindA.pas" und "uKindB.pas". Das Dataset liegt auf dem Formular von uMama, die Felder habe ich in uKindA hinzugefügt. Sie erscheinen aber auch in uKindB. Ich hoffe, jetzt wird mein Problem verständlicher.

joachimd 2. Jul 2019 14:21

AW: Vererbung von TDataSet auf einem Frame
 
Zitat:

Zitat von Codehunter (Beitrag 1435821)
Versteh ich grad nicht. Weil eigentlich hab ich genau das gemacht.

Sorry, verlesen :(
Ich habe beim ersten Durchlesen es so verstanden, dass Du von dem Frame in Unit A ableitest. Ich arbeite eigentlich nicht mit Frames, sondern nehme immer Forms, welche ich dann zur Laufzeit ohne Rand in ein Panel o.ä. einbette - da kommen sie sich nicht ins Gehege.

Codehunter 2. Jul 2019 14:25

AW: Vererbung von TDataSet auf einem Frame
 
Das kann ich leider nicht beeinflussen, das Projektkonzept sieht Frames vor.

DeddyH 2. Jul 2019 14:35

AW: Vererbung von TDataSet auf einem Frame
 
Wenn die Frames aus der Objektablage kommen, muss man aufpassen, dass man beim Einfügen auch "Vererben" ausgewählt hat und nicht "Verwenden".

Delphi.Narium 2. Jul 2019 14:43

AW: Vererbung von TDataSet auf einem Frame
 
Verstehe ich irgendwie nicht:

Du hast ein Frame, das Du zweimal auf ein Formular legst.

Auf diesem Formular liegt auch ein DataSet.

Nun sollen dem einen DataSet auf dem ersten Frame Felder hinzugefügt werden und auf dem zweiten Frame andere?

Irgendwie erschließt sich mir hier der Sinn nicht so ganz.

Habe mal ein Frame erstellt, das 'ne DataSource, ein DBGrid, 'nen DBNavigator und so diverses Allerlei für "Standardhandling" von Datenbankenanzeigen in meinen Programmen kapseln soll.

Das Frame hat u. a. eine Eigenschaft DataSet. Dazu gibt es einen passenden Setter und auch 'nen Getter.
Weise ich nun der Eigenschaft DataSet des Frames eine DataSet zu, so wird im Setter der DataSource auf dem Frame mit dem DataSet auf dem Formular versorgt.

Für mehrere Frames auf einem Formular benötige ich dann auch mehrere DataSets auf dem Formular, es sei denn: Mehrere Frames sollen die gleichen Daten anzeigen.

Alles was das DataSet betrifft, also Feldeditor und Felder hinzufügen ..., geschieht auf dem Formular und nicht in der / den Unit/s der / des Frames.

Wenn in der Unit des Frames was geändert wird, so betrifft das alle Frames dieses Typs und hat auch Auswirkungen auf bestehende Programme, sofern sie neu kompiliert werden.

Das ist aber nicht der Sinn des Feldeditors zum DataSet, da sollen Änderungen nur für eine konkrete Instanz eines Frames gelten.

Eventuell hilft das ja, wenn nicht, weil ich die Aufgabenstellung falsch verstanden habe, vergiss es einfach ;-)

Codehunter 2. Jul 2019 15:00

AW: Vererbung von TDataSet auf einem Frame
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1435827)
Du hast ein Frame, das Du zweimal auf ein Formular legst.

Schon falsch. Ich habe ein Frame, dass ich in die Objektablage hinzufüge. Der Fehler scheint schon hier zu passieren. Denn wenn ich genauer hinschaue, fügt die IDE der Objektablage nicht das von mir erstellte Frame mit dem Dataset hinzu sondern dessen Elternframe (ja ich weiß, schreckliche Verschachtelung, nicht auf meinem Mist gewachsen).

Ich mache da erstmal einen Haken dran, weil zu verfrickelt in der Hierarchie. Da müssen erstmal die Erfinder ran.

Delphi.Narium 2. Jul 2019 15:14

AW: Vererbung von TDataSet auf einem Frame
 
Delphi 7:

Neue Anwendung

Dem Projekt hinzufügen: Unit mit dem Frame auswählen.
Benötigt man mehrere, unterschiedliche Frames, pro Frame wiederholen.

Auf das Hauptformular wechseln.

In der Toolpalette gibt es auf dem Reiter Standard als erstes das Symbol "Frames".

Dieses anklicken.

Auf eine beliebige Stelle des Hauptformulars klicken.

Es erscheint ein Dialog mit allen Frames, die zum Projekt hinzugefügt wurden. Gewünschtes Frame auswählen, ok klicken.

Wie's bei Deinem Delphi konkret aussieht, weiß ich nicht, aber es wird sicherlich einen analogen Weg geben.

In der "Frameunit" wird nichts geändert. Es sei denn, das Frame und alle seine Instanzen in allen Programmen, die es nutzen, soll geändert werden. Also z. B. Fehlerkorrektur im Quelltext des Frames.

Logik, Änderungen, Ergänzungen ... (wie z. B. Feldeditor und Felder hinzufügen für ein DataSet) haben nichts im Quelltext des Frames zu suchen.

Codehunter 2. Jul 2019 15:42

AW: Vererbung von TDataSet auf einem Frame
 
Ich habe das Gefühl, da ist tatsächlich was buggy in der IDE. Wenn ich den ganz klassischen Weg gehe, einfach vorhandene .PAS und .DFM eines Kind-Frames dupliziere und darin nur die Klassennamen ändere, dann funktioniert alles wie ich es erwarten würde. Ich muss die so erzeugten Frame-Units nur dem Projekt hinzufügen und fertig ist der Laden.

Aber sobald ich dieses Objektablagen-Assistenten-Gedöns verwende, kommt alles durcheinander. Die Vererbung setzt am falschen Punkt an in der Kette, die darüber stellten neuen Units jammern rum dass sie ihre Elternklasse nicht finden können usw.

Ich mochte Frames noch nie. Hier muss ich aber mich in dem Rahmen bewegen der vorgegeben ist und das sind nun mal Frames.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.
Seite 1 von 2  1 2      

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