Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi An Prozedur übergebene Parameter gehen verloren. (https://www.delphipraxis.net/156915-prozedur-uebergebene-parameter-gehen-verloren.html)

FriendOfDelphi 20. Dez 2010 14:25

Delphi-Version: 5

An Prozedur übergebene Parameter gehen verloren.
 
Hallo Allerseits!

Folgendes Problem:
Ich rufe folgende Prozedur auf:
Delphi-Quellcode:
Daten:=TDaten.Create(MainForm, MainForm, Test); //TDaten.Create(Aowner:TComponent; AParent:TWinControl; Irgendwas: EigenerDatentyp);
Bevor das Create ausgeführt wird, sind noch alle Daten vorhanden (alle Infos über das Hauptfenster).
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?

DeddyH 20. Dez 2010 14:28

AW: An Prozedur übergebene Parameter gehen verloren.
 
Mir persönlich ist das zu wenig Quelltext, um da etwas erkennen zu können.

stho 20. Dez 2010 14:29

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.

FriendOfDelphi 20. Dez 2010 15:29

AW: An Prozedur übergebene Parameter gehen verloren.
 
Zitat:

Zitat von DeddyH (Beitrag 1069570)
Mir persönlich ist das zu wenig Quelltext, um da etwas erkennen zu können.

Ich verwende eine Prozedur, die eine Info benötigt, von wem sie aufgerufen wurde. Daher gebe ich dieser die Informationen über
Delphi-Quellcode:
AOwner: TComponent; AParent: TWinControl;
mit, bzw. reiche die durch.
Delphi-Quellcode:
AOwner
scheint auch Informationen zu enthalten;
Delphi-Quellcode:
AParent
scheint aber nil zu sein.
Im MainForm wird ein Konstruktor einer Klasse aufgerufen. Diesem Konstruktor gebe ich die Infos
Delphi-Quellcode:
AOwner: TComponent; AParent: TWinControl;
des Hauptformulars mit.
Innerhalb des Konstruktors der aufgerufenen Klasse in der 2. Unit wird wiederum der eigentlich Konstruktor der Klasse aufgerufen der die Info über
Delphi-Quellcode:
AOwner: TComponent; AParent: TWinControl;
benötigt. Ich reiche diese also nur durch. In der 3. Unit meldet der Compiler dann an der Stelle
Delphi-Quellcode:
Parent := AParent;
die Fehlermeldung: "Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000."

In der Haupt-Unit:
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin

//mach was

  Daten:=TDaten.Create(MainForm, MainForm, DBTest);

//mach was

end;
In der 2. Unit:
Delphi-Quellcode:
constructor TDaten.Create(Aowner:TComponent; AParent:TWinControl; Datenbank: TdBase);
begin

//mach was

  Test1:=TSoftSPS.Create(Aowner, AParent, "irgendein Integer-Wert");

//mach was

end;
In der 3. Unit:
Delphi-Quellcode:
constructor TSoftSPS.Create(AOwner: TComponent; AParent: TWinControl; VarGroesse: Integer);
begin
  Parent := AParent; //hier tritt der Fehler auf!!!

//mach was

end;

DeddyH 20. Dez 2010 15:32

AW: An Prozedur übergebene Parameter gehen verloren.
 
Zitat:

Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin

//mach was

  Daten:=TDaten.Create(MainForm, MainForm, DBTest);

//mach was

end;

Im OnCreate erscheint mir das noch ein wenig früh, da das MainForm zu dieser Zeit evtl. noch gar nicht vollständig initialisiert ist. Und wieso greifst Du auf die globale Variable zurück statt auf Self? Zumindest Letzteres würde ich zunächst versuchen.

FriendOfDelphi 20. Dez 2010 16:13

AW: An Prozedur übergebene Parameter gehen verloren.
 
Zitat:

Zitat von DeddyH (Beitrag 1069586)
Zitat:

Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin

//mach was

  Daten:=TDaten.Create(MainForm, MainForm, DBTest);

//mach was

end;

Im OnCreate erscheint mir das noch ein wenig früh, da das MainForm zu dieser Zeit evtl. noch gar nicht vollständig initialisiert ist. Und wieso greifst Du auf die globale Variable zurück statt auf Self? Zumindest Letzteres würde ich zunächst versuchen.

Der frühe Zeitpunkt wird wahrscheinlich das Problem sein. Ich habe das Create mal ganz ans Ende gestellt. Bringt aber nichts.
Ein "OnFormularFertiggestellt" gibt es ja nicht, oder? Zumindest habe ich nichts im Objektinspektor gefunden.
Mein erster Versuch war mit
Delphi-Quellcode:
Daten:=TDaten.Create(self, self, DBTest);
. Da dies aber so nicht funktionierte, hatte ich das geändert und nicht wieder zurück geändert.

DeddyH 20. Dez 2010 16:16

AW: An Prozedur übergebene Parameter gehen verloren.
 
Du könntest mal versuchshalber Loaded überschreiben, da müsste es IMO funktionieren.

FriendOfDelphi 20. Dez 2010 16:22

AW: An Prozedur übergebene Parameter gehen verloren.
 
Zitat:

Zitat von DeddyH (Beitrag 1069598)
Du könntest mal versuchshalber Loaded überschreiben, da müsste es IMO funktionieren.

Das kenne ich noch nicht.
Hast Du ein Beispiel für mich?

DeddyH 20. Dez 2010 16:25

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;

Lemmy 20. Dez 2010 17:26

AW: An Prozedur übergebene Parameter gehen verloren.
 
Hi,

schon mal AfterConstruction versucht?

Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 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