Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Fehlermeldung bei zweitem MainMenu (https://www.delphipraxis.net/200369-fehlermeldung-bei-zweitem-mainmenu.html)

Pytroxis 14. Apr 2019 14:32

Fehlermeldung bei zweitem MainMenu
 
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Tag,

ich bin momentan ein kleines Programm am schreiben, dieses Programm besitzt 2 Forms.
Ich habe versucht auf beiden ein MainMenu einzufügen, allerdings habe ich folgendes Problem:
Sobald ich auf der 2. Form ein MainMenu einfüge erhalte ich beim schließen des Programmes ein Fehler und zwar, dass eine Zugriffsverletzung stattgefunden hat (-> Es wurde versucht mit dem dynamischen array zu arbeiten, welcher noch keine Werte oder eine Länge besitzt (-> Wird erst gesetzt erstellt beim aufrufen der 2. Form, zum Zeitpunkt des Beendens wurde diese nicht aufgerufen)).
Nun stehe ich natürlich auf dem Schlauch. Weshalb erhalte ich diesen Fehler nur, wenn auf Form 2 ebenfalls ein MainMenu benutzt wird?
Ohne das MainMenu funktioniert alles einwandfrei...

hoika 14. Apr 2019 15:03

AW: Fehlermeldung bei zweitem MainMenu
 
Hallo,
sobald du das löschst und nichts anderes, geht es?

Pytroxis 14. Apr 2019 16:01

AW: Fehlermeldung bei zweitem MainMenu
 
Zitat:

Zitat von hoika (Beitrag 1430286)
Hallo,
sobald du das löschst und nichts anderes, geht es?

Genau, sobald ich das MainMenu auf Form2 lösche geht alles wieder reibungslos und das Programm versucht nicht mit dem Array zu arbeiten.
(Dieser Fehler tritt schon auf, wenn ich nur das MainMenu hinzufüge aber noch nichts damit mache).

Bin wirklich ratlos, was das sein kann :S

peterbelow 15. Apr 2019 11:34

AW: Fehlermeldung bei zweitem MainMenu
 
Zitat:

Zitat von Pytroxis (Beitrag 1430284)
Guten Tag,

ich bin momentan ein kleines Programm am schreiben, dieses Programm besitzt 2 Forms.
Ich habe versucht auf beiden ein MainMenu einzufügen, allerdings habe ich folgendes Problem:
Sobald ich auf der 2. Form ein MainMenu einfüge erhalte ich beim schließen des Programmes ein Fehler und zwar, dass eine Zugriffsverletzung stattgefunden hat (-> Es wurde versucht mit dem dynamischen array zu arbeiten, welcher noch keine Werte oder eine Länge besitzt (-> Wird erst gesetzt erstellt beim aufrufen der 2. Form, zum Zeitpunkt des Beendens wurde diese nicht aufgerufen)).
Nun stehe ich natürlich auf dem Schlauch. Weshalb erhalte ich diesen Fehler nur, wenn auf Form 2 ebenfalls ein MainMenu benutzt wird?
Ohne das MainMenu funktioniert alles einwandfrei...

Um welche Delphi-Version geht es hier? Werden beide Forms automatisch erzeugt, oder nur das erste (main form)? Der Fehler rührt daher, das Kode versucht, auf ein Objekt, string, oder dynamic array über eine Variable zuzugreifen, die nil ist, der also nie eine Referenz zugewiesen wurde.

Bau deine Anwendung mal mit Debug informationen und Debug DCUs. Laß sie unter dem Debugger laufen, dann solltest Du anhand des Callstacks ermitteln können, woher das Problem kommt.

Was ist eigentlich der Formstyle des zweiten Forms?

Pytroxis 15. Apr 2019 16:28

AW: Fehlermeldung bei zweitem MainMenu
 
Zitat:

Zitat von peterbelow (Beitrag 1430330)
Um welche Delphi-Version geht es hier? Werden beide Forms automatisch erzeugt, oder nur das erste (main form)? Der Fehler rührt daher, das Kode versucht, auf ein Objekt, string, oder dynamic array über eine Variable zuzugreifen, die nil ist, der also nie eine Referenz zugewiesen wurde.

Bau deine Anwendung mal mit Debug informationen und Debug DCUs. Laß sie unter dem Debugger laufen, dann solltest Du anhand des Callstacks ermitteln können, woher das Problem kommt.

Was ist eigentlich der Formstyle des zweiten Forms?

-Delphi-Version: 10.3
-Beide Forms werden beim Programmstart erzeugt
-Mir ist bewusst, was der Fehler bedeutet, die Variable bzw. der Array besitzt auch solange keinen Wert/keine Länge, solange Form 2 nicht aufgerufen wird.
-> Daran kann der Fehler aber nicht liegen, denn ohne MainMenu schließt sich das Programm ohne Fehler, also muss das MainMenu versuchen irgendwie auf die variable zuzugreifen, obwohl es das nicht sollte/nirgends macht.
--> Demnach liegt es meiner Meinung nach am MainMenu und nicht an meinem Code, denn sonst müsste ja die Meldung immer kommen (oder habe ich einen Denkfehler?).
-Formstyle: fsNormal
-Debug: Im Debugmodus wird mir immer die stelle angezeigt, bei welcher versucht wird auf den Array zuzugreifen, allerdings dürfte bis zu dem Zeitpunkt nicht darauf zugegriffen werden und das Programm versucht auch erst darauf zuzugreifen, wenn das MainMenu vorhanden ist.

Uwe Raabe 15. Apr 2019 16:42

AW: Fehlermeldung bei zweitem MainMenu
 
Da wir deinen Code nicht sehen können, ist eine Beurteilung allerdings schwierig. Mach doch mal ein kleines Testprogramm, das den Fehler zeigt. Ansonsten können wir auch nur raten.

hoika 15. Apr 2019 16:51

AW: Fehlermeldung bei zweitem MainMenu
 
Hallo,
Zitat:

es wurde versucht mit dem dynamischen array zu arbeiten,
Welches dynamische Array?

Ich habe gerade mal ein kleines Bsp.-Programm mit 2 Forms erzeugt -> kein Fehler.

Pytroxis 15. Apr 2019 18:05

AW: Fehlermeldung bei zweitem MainMenu
 
Letztlich wundert es mich halt, weshalb dieser Fehler nur auftritt, wenn in der 2 Form ein MainMenu vorhanden ist.

Unit, in welcher der Array vorhanden ist:
Delphi-Quellcode:
zahlen : array of Double;
...
function einlesenZahlen(listBox : TListBox) : Boolean;
  var
    i: Integer;
  begin

    if listBox.Items.Count >= 4 then begin
    SetLength(zahlen, listBox.Items.Count);
      for i:= 0 to listBox.Items.Count-1 do zahlen[i] := StrToFloat(listBox.Items[i]);
      sortiereZahlen;
      Result := True;
    end
    else begin
      ShowMessage('Bitte mindestens 4 Zahlen eingeben!');
      Result := False;
    end;
  end;
...
procedure zeichnen(Form:TForm; Label1,Label2,Label3,Label4,Label5:TLabel);
  var
    eineLaengenEinheit : Double;
    getHeight : array[0..10] of integer;
    xWert : integer;
    index : integer;
  begin
    eineLaengenEinheit := (Form.Width-120) / (zahlen[Length(zahlen)-1] - zahlen[0]); //Hier wird mir der Fehler angezeigt
...
end;
Form1 (wo eine der Funktionen genutzt wird):
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  if einlesenZahlen(ListBox1) then begin
    Form2.Show;
  end;
end;
Form2:
Delphi-Quellcode:
procedure TForm2.FormPaint(Sender: TObject);
begin
  zeichnen(Form2, Label1, Label2, Label3, Label4, Label5);
  Canvas.Refresh;
end;

procedure TForm2.FormResize(Sender: TObject);
begin
  Button1.Left := Round(ClientWidth * 0.0482954545454545);
  Button1.Top := Round(ClientHeight * 0.8140589569160998);
  Button1.Width := Round(ClientWidth * 0.9034090909090909);

  Canvas.Brush.Color := clMenu;
  Canvas.FillRect(Rect(0,0, Width, Height));
  zeichnen(Form2, Label1, Label2, Label3, Label4, Label5);
end;
Ehrlich gesagt, finde ich hier gerade keinen Fehler und der Fehler tritt ja nur beim schließen des Programms auf (ohne das Form2 aufgerufen wurde), des weiteren ja auch nur, wenn das Menu da ist.
Langsam bin ich echt ratlos :mad:

Uwe Raabe 15. Apr 2019 18:31

AW: Fehlermeldung bei zweitem MainMenu
 
Ich wiederhole:

Zitat:

Zitat von Uwe Raabe (Beitrag 1430361)
Mach doch mal ein kleines Testprogramm, das den Fehler zeigt.


hoika 15. Apr 2019 18:43

AW: Fehlermeldung bei zweitem MainMenu
 
Hallo,
Du benutzt globale Variablen für die arrays, das ist schon mal "doof".

Baue uns ein minmales Beispiel-Programm, was den Fehler erzeugt und kompilierbar ist.

Wo wird das Zahlen-Arrays freigegeben?
Wahrscheinlich noch vor der Freigabe der anderen Forms und dort wird das Zeichnen noch benutzt.

Wenn schon globale Arrays, denn erzeuge sie in der DPR und gibt sie dort auch frei.
-> Oh Gott, habe ich das gesagt??? ;( ;)


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