![]() |
Delphi-Version: 5
An Prozedur übergebene Parameter gehen verloren.
Hallo Allerseits!
Folgendes Problem: Ich rufe folgende Prozedur auf:
Delphi-Quellcode:
Bevor das Create ausgeführt wird, sind noch alle Daten vorhanden (alle Infos über das Hauptfenster).
Daten:=TDaten.Create(MainForm, MainForm, Test); //TDaten.Create(Aowner:TComponent; AParent:TWinControl; Irgendwas: EigenerDatentyp);
Soweit, so gut. Mit "F7" in die Routine springen. In der Routine angekommen, ist nur noch der Parameter "Irgendwas" mit Daten gefüllt. "Aowner" und "AParent" sind nil. Was ist da los? Was mache ich falsch? |
AW: An Prozedur übergebene Parameter gehen verloren.
Mir persönlich ist das zu wenig Quelltext, um da etwas erkennen zu können.
|
AW: An Prozedur übergebene Parameter gehen verloren.
Schreib dir doch eine Procedure die ankommende Parameter in ein Logfile schreibt ;)
Damit kannst du immer sehen welche Daten ankommen. Achja, als Vergleichswert musst du natürlich auch Protokollieren was du der Procedur an Parametern übergibst. |
AW: An Prozedur übergebene Parameter gehen verloren.
Zitat:
Delphi-Quellcode:
mit, bzw. reiche die durch.
AOwner: TComponent; AParent: TWinControl;
Delphi-Quellcode:
scheint auch Informationen zu enthalten;
AOwner
Delphi-Quellcode:
scheint aber nil zu sein.
AParent
Im MainForm wird ein Konstruktor einer Klasse aufgerufen. Diesem Konstruktor gebe ich die Infos
Delphi-Quellcode:
des Hauptformulars mit.
AOwner: TComponent; AParent: TWinControl;
Innerhalb des Konstruktors der aufgerufenen Klasse in der 2. Unit wird wiederum der eigentlich Konstruktor der Klasse aufgerufen der die Info über
Delphi-Quellcode:
benötigt. Ich reiche diese also nur durch. In der 3. Unit meldet der Compiler dann an der Stelle
AOwner: TComponent; AParent: TWinControl;
Delphi-Quellcode:
die Fehlermeldung: "Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000."
Parent := AParent;
In der Haupt-Unit:
Delphi-Quellcode:
In der 2. Unit:
procedure TMainForm.FormCreate(Sender: TObject);
begin //mach was Daten:=TDaten.Create(MainForm, MainForm, DBTest); //mach was end;
Delphi-Quellcode:
In der 3. Unit:
constructor TDaten.Create(Aowner:TComponent; AParent:TWinControl; Datenbank: TdBase);
begin //mach was Test1:=TSoftSPS.Create(Aowner, AParent, "irgendein Integer-Wert"); //mach was end;
Delphi-Quellcode:
constructor TSoftSPS.Create(AOwner: TComponent; AParent: TWinControl; VarGroesse: Integer);
begin Parent := AParent; //hier tritt der Fehler auf!!! //mach was end; |
AW: An Prozedur übergebene Parameter gehen verloren.
Zitat:
|
AW: An Prozedur übergebene Parameter gehen verloren.
Zitat:
Ein "OnFormularFertiggestellt" gibt es ja nicht, oder? Zumindest habe ich nichts im Objektinspektor gefunden. Mein erster Versuch war mit
Delphi-Quellcode:
. Da dies aber so nicht funktionierte, hatte ich das geändert und nicht wieder zurück geändert.
Daten:=TDaten.Create(self, self, DBTest);
|
AW: An Prozedur übergebene Parameter gehen verloren.
Du könntest mal versuchshalber Loaded überschreiben, da müsste es IMO funktionieren.
|
AW: An Prozedur übergebene Parameter gehen verloren.
Zitat:
Hast Du ein Beispiel für mich? |
AW: An Prozedur übergebene Parameter gehen verloren.
Delphi-Quellcode:
type
TForm1 = class(TForm) private { Private-Deklarationen } protected procedure Loaded; override; public { Public-Deklarationen } end; ... procedure TForm1.Loaded; begin inherited; ShowMessage('Geladen: ' + self.Name); end; |
AW: An Prozedur übergebene Parameter gehen verloren.
Hi,
schon mal AfterConstruction versucht? Grüße |
AW: An Prozedur übergebene Parameter gehen verloren.
Zitat:
Delphi-Quellcode:
ausprobiert. Leider keine Veränderung. Der Compiler meldet weiterhin an der Stelle Parent := AParent; die Fehlermeldung: "Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000."
procedure TForm1.Loaded;
|
AW: An Prozedur übergebene Parameter gehen verloren.
Zitat:
Delphi-Quellcode:
habe ich auch gerade ausprobiert. Leider auch keine Veränderung. Der Compiler meldet auch hier an der Stelle Parent := AParent; die Fehlermeldung: "Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000."
procedure TForm1.AfterConstruction;
|
AW: An Prozedur übergebene Parameter gehen verloren.
.Loaded() sollte der richtige Ort sein
|
AW: An Prozedur übergebene Parameter gehen verloren.
Liste der Anhänge anzeigen (Anzahl: 4)
Zitat:
Ich habe jetzt mal beide Prozeduren, also
Delphi-Quellcode:
und
procedure TForm1.Loaded;
Delphi-Quellcode:
, eingebaut und bin dann das Programm mit "F7" im Single Step-Modus durchgegangen.
TForm1.AfterConstruction;
Delphi-Quellcode:
wird aufgerufen, bevor das Programm in
procedure TForm1.Loaded;
Delphi-Quellcode:
verzweigt. Zu diesem Zeitpunkt sind meine grafischen Elemente noch nicht gebaut.
procedure TMainForm.FormCreate(Sender: TObject);
Delphi-Quellcode:
wird aufgerufen, nachdem
TForm1.AfterConstruction;
Delphi-Quellcode:
abgearbeitet ist und wieder verlassen wurde. Zu diesem Zeitpunkt sind alle über den Quellcode erstellten grafischen Elemente bereits gebaut.
procedure TMainForm.FormCreate(Sender: TObject);
Ich weiß nicht, ob das wichtig ist. Allerdings ist es so, dass in beiden Fällen der Compiler an der Stelle
Delphi-Quellcode:
die Fehlermeldung: "Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000." bringt.
Parent := AParent;
Zum Zeitpunkt des Aufrufs von
Delphi-Quellcode:
zeigt der Compiler (wenn man mit dem Mauszeiger darüber fährt) für den ersten Parameter / das erste
Daten:=TDaten.Create(self, self, Test); //TDaten.Create(Aowner:TComponent; AParent:TWinControl; Irgendwas: EigenerDatentyp);
Delphi-Quellcode:
: s. Datei "Inhalt_Aowner_TComponent_vorher.jpg" und für den zweiten Parameter / das zweite
self
Delphi-Quellcode:
: s. Datei "Inhalt_AParent_TWinControl_vorher.jpg".
self
Springt man mit "F7" in die Routine hinein zeigt der Compiler folgendes für den ersten Parameter: s. Datei "Inhalt_Aowner_TComponent_nachher.jpg" und für den zweiten Parameter: s. Datei "Inhalt_AParent_TWinControl_nachher.jpg (14,9 KB)". Vielleicht hilft das weiter... |
AW: An Prozedur übergebene Parameter gehen verloren.
Kannst Du nicht einfach ein kleines Demoprojekt anhängen? Ich denke, im Gesamtzusammenhang versteht man das Problem besser.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 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-2025 by Thomas Breitkreuz