AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Generische Erzeugung von Objekten...

Ein Thema von barnti · begonnen am 7. Sep 2004 · letzter Beitrag vom 8. Sep 2004
Antwort Antwort
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Generische Erzeugung von Objekten...

  Alt 7. Sep 2004, 13:22
Hallo,

ich habe eine Klasse vom Typ 'TPDObject'. Davon erben die spezielleren Objekte, z.B.TPDKunde,TPDWare...
Für jede meiner Datenbanktabellen möchte ich jetzt ein spezielleres Objekt erzeugen, sobald die Anwendung gestartet wird, bzw. eine der Tabellen benötigt wird.
Ist es möglich diese Erzeugung zu automatisieren, bzw mit eier generischen Funktion durchzuführen?
Die Lösung sollte dann in etwa so ausschauen:

-User wählt Eintrag aus ComboBox -> 'Kunde'
-Item entscheidet über die Erzeugung des speziellen Objektes -> TPDKunde.create.

Alles unklar?! Fragt mich! Würde mich über Anregungen sehr freuen!
Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Generische Erzeugung von Objekten...

  Alt 7. Sep 2004, 13:33
Moin,

was du brauchst sind klassen-referenzen (metaklassen oder wie die heissen). Zu dem speziellen feld suchst du dir die richtige referenz und kannst dann normal instanzieren:

Delphi-Quellcode:
type
  TPDObjectClass = class of TPDObject;
..
var
  pdClass :TPDObjectClass ;
...
// klassen-referenz holen
pdClass := findClass( ?GetActFieldClassName? );
if pdClass <> nil then
  obj := pdClass.create; // fertig


...
initialization
  // damit man später über den namen an die klasse kommt
  RegisterClasses([TPDKunde,etc,...]);
Wichtig ist das die klassen registriert werden! Du kannst dir da auch deine eigene registry schreiben, die direkt auf den feldnamen reagiert (zB. mit einer stringliste)
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
LarsMiddendorf

Registriert seit: 4. Sep 2003
Ort: Hemer
104 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Generische Erzeugung von Objekten...

  Alt 7. Sep 2004, 13:36
Die Klasse TPDObject sollte auch einen virtuellen Konstruktor haben, weil sonst der Konstruktor von TPDObject aufgerufen wird und nicht der Konstruktor der abgeleiteten Klasse TPDKunde,TPDWare,... .
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Generische Erzeugung von Objekten...

  Alt 7. Sep 2004, 13:41
Hi,
ok, werde mal basteln! Melde mich dann später noch einmal...
Danke.
Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Generische Erzeugung von Objekten...

  Alt 7. Sep 2004, 14:07
Hi,
habs mal nach deinem Beispielcode versucht, leider mit folgender Fehlermeldung:
Delphi-Quellcode:
type
  TPDObjectClass = class of TPDObject;
..
var
  pdClass :TPDObjectClass ;
...
// klassen-referenz holen
pdClass := findClass( ?GetActFieldClassName? ); // hier beschwert sich der Compiler
if pdClass <> nil then
  obj := pdClass.create; // fertig


...
initialization
  // damit man später über den namen an die klasse kommt
  RegisterClasses([TPDKunde,etc,...]);




[Error] PDInterface.pas(108): Incompatible types: 'TPersistentClassand 'Class reference'
Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Generische Erzeugung von Objekten...

  Alt 7. Sep 2004, 14:41
Hallo,
ok, ich muss das zu erzeugende Objekt vom Typ 'TPersistent' ableiten und nicht von 'TObject'. Dann klapp es!
Kann mir jemand sagen, ob dies ein Problem darstellt, 'TPersistent' oder 'TObject'?
Gruß,

Barnti
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: Generische Erzeugung von Objekten...

  Alt 7. Sep 2004, 14:54
Ich kann es mir nicht vorstellen, denn letzendlich sind ALLE Objekte von Delphi von TObject abgeleitet, auch TPersistent.
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#8

Re: Generische Erzeugung von Objekten...

  Alt 8. Sep 2004, 09:50
Zitat von Dax:
Ich kann es mir nicht vorstellen, denn letzendlich sind ALLE Objekte von Delphi von TObject abgeleitet, auch TPersistent.
Naja, in diesem fall is das sicher kein problem, da TPersistent eine sehr allgemeine oberklasse ist. Aber generell kann man ja wohl kaum sagen, dass es egal wäre, von wo man ableitet, nur weil letztendlich alles TObjects sind ...aber is schon klar was du damit sagen wolltest.

@barnti:

Ja, wenn du findClass nutzen willst, dann musst du von TPersistent ableiten. Die frage ist natürlich ob das nötig ist, bzw. was deine objekte können sollen und was nicht. Wenn sie zB. persistenzierbar sein müssen, dann wäre das die erste wahl.

Ich hab oben aber schon erwähnt, dass du deine eigene klassen-registrierung machen kannst, die dann auch für TObject geht. In der unit Contnrs (D7) gibt es die klasse TClassList mit der dies sehr einfach möglich wäre.

Du brauchst eigentlich nur drei routinen:
Delphi-Quellcode:
procedure pdRegisterClass(aClass:TpdClass);
procedure pdUnRegisterClass(aClass:TpdClass);
function pdFindClass(aClassName:string):TpdClass;
die innereien sind dann standard zeug
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Generische Erzeugung von Objekten...

  Alt 8. Sep 2004, 10:10
Zitat von maximov:
was du brauchst sind klassen-referenzen (metaklassen oder wie die heissen). Zu dem speziellen feld suchst du dir die richtige referenz und kannst dann normal instanzieren:
In der OH gibt da jede menge zeug dazu, siehe Delphi-Referenz durchsuchenklassenreferenzen oder Delphi-Referenz durchsuchenklassenreferenztypen.

Zitat von maximov:
In der unit Contnrs (D7) gibt es die klasse TClassList mit der dies sehr einfach möglich wäre.
Bei D6 ist Contnrs auch dabei, falls mötig.
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 Uhr.
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