AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit Konstruktoren

Ein Thema von delphino · begonnen am 24. Mai 2005 · letzter Beitrag vom 2. Jun 2005
Antwort Antwort
delphino

Registriert seit: 4. Mai 2005
11 Beiträge
 
#1

Problem mit Konstruktoren

  Alt 24. Mai 2005, 14:32
Holla !

Nachdem ich beim letzten Mal hier sehr schnell mit einer möglichen Lösung sehr schnell zu einer Problemlösung fand, stelle ich mal wieder eine Frage. Alles ein bißchen Komplex, aber hoffe, dass ich es ausreichend erklären kann.

Habe eine TPageControl, die ja bekanntermaßen TTabSheets hat. Die PageControl liegt auf einem Frame, die TabSheets bekommen wieder Frames aufgelgt. Habe eine Klasse TErfassen gebaut, welche sich von TFrame ableitet. Funzt auch wunderbar. Nur möchte ich jetzt den DB-Handler des Frames mit der PageControl dem TErfassen übergeben, damit TErfassen darauf einen Query und Datasource erstellen kann.

Dazu gibt es in TErfassen einen Contructor:

Delphi-Quellcode:
constructor TErfassen1.Create(AOwner:TComponent; DB:TDBForm);
begin
   inherited Create(AOwner);
   SQLHandle1 := TSQLHandle.Create(DB);
   DBText1.DataSource := SQLHandle1.DataSource1;
end;
Natürlich müßte ich den irgendwo aufrufen. Dazu noch ein paar Infos:

Habe im Designer nun das Frame mit dem TPageControl, der mir dann auch das TErfassen auf einem TTabSheet anzeigt, also auch ein DFM wo definiert ist wie groß das TTabSheet und die TTPageControl sein soll. ABER 1. kann ich im DFM wohl keine Konstruktoren aufrufen, folglich kann ich auch keine Werte übergeben. Versuche eines meiner DBHandler Objekte als Property im DFM zu übergeben schlug fehl. Außerdem wäre die Constructor-Lösung eher geeignet, da der DBHandler später dynamisch übergeben werden soll und im Sinne von "Wiederverwendbarkeit des Codes" auch in anderen TTabSheets zur Verfügung stehen soll, die dann jeweils ihre eingenen DBHandler und darauf basierende Querys und DataSources haben.

Also kurz: Wie kann ich Konstruktoren von abgeleiteten Frames über den Desginer aufrufen, wenn ich weiterhin im RAD meine Desgins erstellen will ??


Um das ganze vllt zu umgehen. Gibt es eine Möglichkeit auf Methoden und Attribute des Parent-Objektes zuzugreifen ? Sprich: Das PageControl (auf einem Frame) ist ja quasi parent meiner TTabSheets, welche wiederum Frames enthalten. Hierachie ist dann Frame, welches das TabSheet als parent hat, dessen parent ist PageControl und dessen parent ist das Frame. Kann ich nun vom untersten Frame auf Attribute des obersten Frame zugreifen ?


Hoffe ich verwirre jetzt nicht zu sehr. Vllt habe ich ja auch nurn dicken, fetten Denkfehler in meinen Überlegungen.


Thanks in advance...

delphino
Divide And Conquer !!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Problem mit Konstruktoren

  Alt 24. Mai 2005, 15:05
Konstruktoren von Komponenten welche von TComponent abgeleitet sind müssen immer die Signatur
constructor Create(AOwner: TComponent); besitzen. Die Delphi-IDE und das gesamte darauf aufsetzende Komponentenmodell verläßt sich darauf.
Alles andere mußt Du über Properties machen!
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
delphino

Registriert seit: 4. Mai 2005
11 Beiträge
 
#3

Re: Problem mit Konstruktoren

  Alt 24. Mai 2005, 16:22
Okay, dann mach ich das mal über Properies. Funzt auch... Danke...

Noch eine weiterführende Frage, da ich ja nun keinen explizieten Constructor oder OnCreate-Ereignis bei einem Frame habe, wie kann ich es hinbekommen, dass trotzdem beim Instanzieren der Klasse, bestimmte Operatiionen ausgeführt werden ??

Gruß delphino
Divide And Conquer !!
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#4

Re: Problem mit Konstruktoren

  Alt 24. Mai 2005, 16:50
Indem Du dir selbst den Constructor des Frames überschreibst:

Delphi-Quellcode:
public
  constructor Create(AOwner: TComponent); override;
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Problem mit Konstruktoren

  Alt 24. Mai 2005, 21:44
Zitat von KrasserChecker:
Delphi-Quellcode:
public
  constructor Create(AOwner: TComponent); override;
Also ich würds eher so machen:
Delphi-Quellcode:
public
  constructor Create(AOwner: TComponent ; DB : TDBForm); overload;
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: Problem mit Konstruktoren

  Alt 24. Mai 2005, 22:17
Zitat von Jelly:
Zitat von KrasserChecker:
Delphi-Quellcode:
public
  constructor Create(AOwner: TComponent); override;
Also ich würds eher so machen:
Delphi-Quellcode:
public
  constructor Create(AOwner: TComponent ; DB : TDBForm); overload;
Das bringt dir aber nix.
Wenn du den virtuellen Contructor von TComponent überschreibst kannst du eigenen Code einschleusen.
Dein überladenen Constructor würde vom Delphi Streaming System nicht angerührt werden. Somit wäre die Instanz nicht genügend initialisiert.

Delphi-Quellcode:
constructor(aOwner :TComponent);override;
...
constructor SomeClass(aOwner :TComponent);
begin
  //irgendwas vor dem Constructor des Vorgängers ausführen
  inherited;//Constructor des Vorgängers
  //irgendwas nach dem Constructor des Vorgängers ausführen
end;
  Mit Zitat antworten Zitat
delphino

Registriert seit: 4. Mai 2005
11 Beiträge
 
#7

Re: Problem mit Konstruktoren

  Alt 25. Mai 2005, 10:48
Nunja, das ist ja alles schön und gut, aber löst das Problem der Übergabe von Parametern nicht.

Im Constructor des ersten Frames setze ich das Property DBHandle des anderen Frames auf das DBHandle, über welchen der erste Frame verfügt.
Der erste Frame erstellt während der Laufzeit ja seine Objekte, also u.a. das PageControl und die TabSheets, welche wiederum den zweiten Frame instanziieren... im Constructor des zweiten Frames möchte ich allerdings schon was mit dem DBHandle tun, was fehlschlägt, da die Objekte wohl erstellt werden bevor das Property gesetzt wird. Dabei ist es egal, ob ich das Property vor oder nach dem Ausführen von inherited setze. Geht sogar soweit, dass Delphi inkl. Debugger 100% Systemlast verursachen und den Speicher vollschreiben und sich nur per kill zum aufhören bewegen lassen.

Wie gesagt, vllt fahr ich ja auf nem völlig falschen Dampfer, weil ich aus der Java/PHP-Ecke komme und dort solche Code-Konstrukte funktionieren und auch erwünscht bzw. so vorgesehen sind und es unter Deplhi anders gelöst werden muss, aber dazu fällt mir im Moment echt nichts ein.


Gruß und danke, dass sich soviele Leute Gedanken machen...

delphino


P.S.:
Delphi-Quellcode:
public
  constructor Create(AOwner: TComponent ; DB : TDBForm); overload;
^^ das habe ich ja zuerst probiert. Allerdings wird dieser Konstruktor nicht vom RAD aufgerufen, bzw. ich weiß nicht, wie ich dem RAD sagen kann, dass es diesen Constructor benutzen soll oder wo ich im RAD dann enstprechend angeben kann, dass noch mehr Parameter als nur der Owner übergeben werden sollen.
Divide And Conquer !!
  Mit Zitat antworten Zitat
delphino

Registriert seit: 4. Mai 2005
11 Beiträge
 
#8

Re: Problem mit Konstruktoren

  Alt 2. Jun 2005, 15:26
So, hab mal ein bißchen Nachgedacht und mache jetzt halt alles ganz anders... *lol*

Gibt jetzt ne DB - Kapselklasse, die man einfach instanziiert wenn man in einem Form Zugriff auf ne DB braucht. Ist zwar alles noch im Test-Stadium, aber bin zuversichtlich, dass es funktioniert.

Danke nochmals für die vielen Antworten !!

delphino
Divide And Conquer !!
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#9

Re: Problem mit Konstruktoren

  Alt 2. Jun 2005, 16:06
was man auch machen könnte, nachdem dein programm geladen wurde könnte man (sofern es sich um ein TComponent abkömmling handelt) seine Loaded procedure überschreiben...

Delphi-Quellcode:
type
  TFoo = class(TComponent)
  public
  ...
    procedure Loaded; override;
  ...
  end;


procedure TFoo.Loaded;
begin
  inherited;
  ... code der nach dem initializieren der componente ausgeführt werden soll ...
end;
</senf>
  Mit Zitat antworten Zitat
delphino

Registriert seit: 4. Mai 2005
11 Beiträge
 
#10

Re: Problem mit Konstruktoren

  Alt 2. Jun 2005, 17:59
Ola,
dass ja arg. So ein Konstrukt werde ich mal ausprobieren. Was mich an Delphi stört sind diese 1000 komischen Sachen, die Delphi macht von denen man so im Normalfall garnichts mitbekommt. Macht einem das Leben nicht gerade einfacher. Nunja, werd mich weiter durchbeißen.

Thx für den Tip...

delphino
Divide And Conquer !!
  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 04:36 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