![]() |
Datenmodule, die nicht von TDataModule kommen
Hi,
ich hab ein kleines Problemchen, da Delphi nicht ganz kapiert, was ich will. Da ich ein wenig mit OOP rumspielen muss, habe ich eine Basis-TDataModule-Klasse, die ungefähr so aussieht:
Delphi-Quellcode:
Nun sieht das auch ganz schnuckelig aus. Es wird keine DFM-Datei eingebunden, weil ich der Meinung war, dass ich keine brauche, da sich keine Komponenten auf dem Modul befinden, sondern nur ein paar Felder und ein paar Methoden (teilweise abstrakt). Nun habe ich aber eine Nachfahren-Klasse, die ungefähr so aussieht:
type
TBaseModule = class (TDataModule) {...} end;
Delphi-Quellcode:
Hier wird eine Resourcen-DFM-Datei eingebunden, weil sich hier auch einige non-visuelle Komponenten befinden (außerdem werden die abstrakten Methoden implementiert).
type
TChildModule = class (TBaseModule) {...] end; Soweit so gut. Das Problem ist, dass Delphi nicht kapiert, dass es sich bei TChildModule um ein Datenmodul handelt, sondern es wie ein Formular behandelt. Das ist schlecht, sehr schlecht sogar, weil in der DFM von TChildModule stehen Dinge drin, die gar nicht existieren, wie z.B. die Eigenschaft Color. Das ist deswegen schlecht, weil dem entsprechend auch die Meldung beim Starten des Programmes kommt: Zitat:
Chris |
Re: Datenmodule, die nicht von TDataModule kommen
Wozu benötigst du denn eine Ableitung von TDatamodule, wenn Du die DFM nicht willst? Oder auch anders gefragt: Was stört dich an einer DFM?
|
Re: Datenmodule, die nicht von TDataModule kommen
Hai Chakotay,
warum leitest Du denn TBaseModul überhaupt von TDataModule ab? Schreibe Dir doch einfach deine Klasse welche Du von TObject ableitest. Dann hast Du dafür garaniert auch kein "DFM mehr am Hals". |
Re: Datenmodule, die nicht von TDataModule kommen
Hi,
@alzaimar: Hm. Naja, so gesehen nichts, aber ich dachte jetzt erstmal, dass ich die nicht brauche, weil das Base-Datenmodul keine Komponenten beinhaltet. Warum brauche ich also DFM? @Sharky: Naja, das Problem ist halt, dass mein Child-Datenmodul Komponenten beinhalten wird. Und warum dann ein zusätzliches Datenmodul erzeugen, wenn es auch direkt geht? So gesehen muss ich das so machen, da nachher noch auf diese Komponenten zugegriffen werden soll. Sicher kann ich das über Felder und dynamische Komponenten machen, aber das ist nicht ganz der Sinn der Anforderung. ;) Chris |
Re: Datenmodule, die nicht von TDataModule kommen
Das Problem bei sämtlichen visual designing Krams in D32 ist, dass du /immer/ über das Object repo ableiten /musst/.
Du erzeugst dir also ein Package. Dein TBaseModule bekommst über das DataModule template. Nun erzeugst du dein TChildModule über FileßNew\Others suchst dir den Reiter, der so heißt wie dein Package, wählst TBaseModule aus und [OK]. Du kannst jetzt beide visuell designen. Jetzt noch eine kleine Unit in der du das Registrieren in die IDE übernimmst:
Delphi-Quellcode:
Auf die Art kannst du dir visuell eine Komponente erstellen auf der du andere Komponenten platzieren und bearbeiten kannst.
interface
uses Classes; procedure Register; implementation uses uBaseModule,uChildModule; procedure Register; begin RegisterComponents('DP Samples',[TBaseModule, TChildModule]); end; DataModule <> Datenbankprogrammierung. ;) Sehe es ähnlich als ob du in .Net auf new Component klickst. Dummerweise sind alle Komponenten auf dem DataModule published. Wobei das durch das komische Konzept von DFM-Resourcen anstatt generierten Code wie in .Net verursacht wird. Willst du das verstecken, musst du noch einen Wrapper darum schreiben. :? Ich hoffe ich habe verstanden, was du vorhattest... :gruebel: btw: Lösche diese DAU-Variablen aus den generierten Units raus. Die verhindern, dass man damit auch nur irgendwas brauchbares anstellen kann. @alzi Es ist a) größer die Einstellungen in eine DFM zu packen und b) ist es langsamer wenn die ganze Initialisierung erst die DFM auslesen muss. (Und das für /jeden/ Vorfahren!) Ich denke das störte ihn. ;) |
Re: Datenmodule, die nicht von TDataModule kommen
Hi Robert,
uff... okay, das bedeutet einiges an Arbeit. Danke für die Tipps, aber ich bin jetzt erstmal eine Woche ein Spanien. Ich guck mir das Ganze an, wenn ich wieder hier bin (nächste Woche Samstag). Chris :hi: |
Re: Datenmodule, die nicht von TDataModule kommen
Ich verstehe nicht, wie man 21.Jahrhundert auf 3-6GHZ Büchsten noch einen Gedanken an einige Bytes DFM-Initialisierung verschwendet, aber gleichzeitig auf die VCL zurückgreift. Deshalb finde ich die Überlegungen bezüglich EXE (RC)-Größe und Initialisierungscodeausführungsverzögerungen ehrlich gesagt überflüssig wie einen Kropf. Das geht nicht gegen irgendjemanden, sondern allgemein: Man sollte seine eigenen Resourcen (Gehirnschmalz) nicht dafür verschwenden.
Meine Meinung. Eigene Datenmodule benutze ich auchg: Dort sind meine Standarddatenbank- und Repositorykomponenten enthalten... Man darf nie vergessen, das in der Delphi-Hilfe überall steht, das die VCL-Komponenten als Basis für eigene Komponeten dienen (können) und nicht der Weisheit letzter Schluss sind. |
Re: Datenmodule, die nicht von TDataModule kommen
Zitat:
Für jedes *piep* Objekt wird die ganze *piep* Liste durchrannt wiss die nötige MetaClass gefunden wird. Natürlich werden dabei /jedesmal/ string-Vergleiche gemacht. Die VCL ist voll von Ecken und Kanten, die nie eine Optimierung erfahren haben. Auch wenn es dir unnütz erscheinen mag, lange darüber nachzdenken. (Ich selbst opfere liebend gerne auch mal mehr als 5% Performance für hübscheren Code :zwinker: ) Ein Form auf dem ein paar frames liegen, die wiederum Frames enthalten können, welche alle von Basisframes ableiten braucht mehr als 1 Sekunde zum Laden. Nur zum Laden! Ohne alles andere. Die einzige Möglichkeit, die ich damals gesehen habe um zu verhindern, dass der User meine App für "sluggish" hält war, sämtlichen Mist in Code zu hämmern. -> geiles RAD-Konzept! :? Zitat:
|
Re: Datenmodule, die nicht von TDataModule kommen
Typische DP-Experten Diskussion. 8)
Mir stellen sich aber hierzu 2 Fragen : Zitat:
Zitat:
|
Re: Datenmodule, die nicht von TDataModule kommen
@Hansa
Warum mischst du dich immer in Dinge ein von denen du anscheinend keinen Schimmer hast? :gruebel: Zitat:
Zitat:
Und nun rate mal woher die Werte des Vorgängers zum Nachfolger finden? Richtig! Es wird erst die DFM der Vorgänger ausgelesen und dann die der zu erstellenden Form/Frame-Klasse. Was ja eigentlich absolut llogisch sein sollte... btw: Gewöhne dir einfach ab auf meine Posts zu antworten. Solange du mich nicht direkt fragst, ist es einfacher den Kauderwelsch zu ignorieren... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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