Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler im Programm? (https://www.delphipraxis.net/28577-fehler-im-programm.html)

Flofu 26. Aug 2004 15:46


Fehler im Programm?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

Ich habe ein kleines Problem in meinem Programm.
Das Programm ist im Anhang. Wer kann mir da weiterhelfen? Es geht im grunde um die Übergabe bzw. den Zugriff auf Variabeln, Panel oder Edit Inhalten von einer Unit auf die andere. Das Programm ist nur zum Üben gedacht, und hat keinen tieferen Sinn.
Kann sich jemand das Programm mal anschauen und mir sagen woran es liegt?
Der Fehler liegt wohl in der Unit11 in der Zeile erg := Form2.PZahl[4].Caption! Aber warum?

Vielen Dank schon mal.

Mit freundlichen Grüßen

Flofu

Bowler 26. Aug 2004 16:02

Re: Fehler im Programm?
 
Ist die Indizierung bei Arrays nicht 0-based? Müsste es denmach nicht

Delphi-Quellcode:
erg := Form2.PZahl[3].Caption;
Heissen? Ich habe bisher nur kurz in Deinen Code geschaut, aber gesehen, dass Du das Array mit [1..4] anlegst...damit hast Du 4 Elemente im Array....wenn Du dann darauf zugreifst, dann fängt das ganze bei null an, also so:

Delphi-Quellcode:
erg := Form2.PZahl[0].Caption;
erg := Form2.PZahl[1].Caption;
erg := Form2.PZahl[2].Caption;
erg := Form2.PZahl[3].Caption;
Ich weiss nun nicht, ob das zur Lösung beträgt, ist aber meines Erachtens erstmal ein Fehler.

Gruß
Christian

CenBells 26. Aug 2004 16:08

Re: Fehler im Programm?
 
Hi,

dein problem liegt dort (Hauptprogramm)
Delphi-Quellcode:
procedure TForm1.neuesFormular1Click(Sender: TObject);
var BnForm : TForm2;
begin
  BnForm := TForm2.Create(Self);
  BnForm.Show;
end;
du erzeugst eine Instanz von TForm2 und zwar in der Variable BnForm.
Dein Aufruf in Menu11 lautet aber wie folgt.
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var erg : string;
begin
 erg := Form2.PZahl[4].Caption;
Hier willst du auf den Inhalt der Variable Form2 zugreifen.
Da die Instanz aber nicht erzeugt wurde, kracht es.
Also, in Hauptprogramm lieber
Delphi-Quellcode:
procedure TForm1.neuesFormular1Click(Sender: TObject);
begin
  if not assigned(Form2) then // <- damit überprüfst du, ob die instanz bereits erzeugt wurde.
    Form2 := TForm2.Create(Self); // wenn nicht, erzeugst du hier eine
  Form2.Show;
end;
Edit:
Zitat:

Zitat von Bowler
Ist die Indizierung bei Arrays nicht 0-based? Müsste es denmach nicht ..

Nein in diesem Fall nicht. Flofu hat das Array als ab 1 beginnend deklariert.
Gruß
ken

Flofu 27. Aug 2004 06:24

Re: Fehler im Programm?
 
Zitat:

Zitat von Bowler
Ist die Indizierung bei Arrays nicht 0-based? Müsste es denmach nicht

Delphi-Quellcode:
erg := Form2.PZahl[3].Caption;
Heissen? Ich habe bisher nur kurz in Deinen Code geschaut, aber gesehen, dass Du das Array mit [1..4] anlegst...damit hast Du 4 Elemente im Array....wenn Du dann darauf zugreifst, dann fängt das ganze bei null an, also so:

Delphi-Quellcode:
erg := Form2.PZahl[0].Caption;
erg := Form2.PZahl[1].Caption;
erg := Form2.PZahl[2].Caption;
erg := Form2.PZahl[3].Caption;
Ich weiss nun nicht, ob das zur Lösung beträgt, ist aber meines Erachtens erstmal ein Fehler.

Gruß
Christian

Hi, ja das stimmt schon, aber PZahl greift nicht auf das array zu sondern auf den Zähler i, der in einer for-Schleife von eins bis 4 gezählt wird. Es ist natürlich aber die Frage wie die Panel nun nach dem erstellen nummeriert sind, da sie ja nur dynamisch bei Laufzeit erstellt werden? Aber danke schon mal. Leider hat die Änderung nichts bewirkt.

Flofu 27. Aug 2004 06:40

Re: Fehler im Programm?
 
Zitat:

Zitat von CenBells
Hi,

dein problem liegt dort (Hauptprogramm)
Delphi-Quellcode:
procedure TForm1.neuesFormular1Click(Sender: TObject);
var BnForm : TForm2;
begin
  BnForm := TForm2.Create(Self);
  BnForm.Show;
end;
du erzeugst eine Instanz von TForm2 und zwar in der Variable BnForm.
Dein Aufruf in Menu11 lautet aber wie folgt.
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var erg : string;
begin
 erg := Form2.PZahl[4].Caption;
Hier willst du auf den Inhalt der Variable Form2 zugreifen.
Da die Instanz aber nicht erzeugt wurde, kracht es.
Also, in Hauptprogramm lieber
Delphi-Quellcode:
procedure TForm1.neuesFormular1Click(Sender: TObject);
begin
  if not assigned(Form2) then // <- damit überprüfst du, ob die instanz bereits erzeugt wurde.
    Form2 := TForm2.Create(Self); // wenn nicht, erzeugst du hier eine
  Form2.Show;
end;
Edit:
Zitat:

Zitat von Bowler
Ist die Indizierung bei Arrays nicht 0-based? Müsste es denmach nicht ..

Nein in diesem Fall nicht. Flofu hat das Array als ab 1 beginnend deklariert.
Gruß
ken

Hallo, danke erst mal, nach der Umstellung hat es funktioniert. Es lag wohl daran, das ich die Form als BnForm aufgerufen habe, und auf Form2 zugreifen wollte. Aber es hat weder geklappt mit einer Umstellung von BnForm auf Form2 noch im Aufruf als erg := BnForm.PZahl[4].Caption. Es verstehe nicht, wieso diese Instanz noch nicht erzeug sein konnte, da ich den Dialog der darauf zugreift (Unit11) ja erst öffnen kann wenn ich Form2 auf dem Schirm habe. Was mich dann wieder zu meiner Frage bringt, wie ich auf beliebige Variabeln, nicht unbedingt nur Inhalte von Panels o.ä. von einer in die nächste Unit zugreifen kann. Naja erst mal danke.

Mit freundlichen Grüßen Flo


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