![]() |
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... |
AW: Fehlermeldung bei zweitem MainMenu
Hallo,
sobald du das löschst und nichts anderes, geht es? |
AW: Fehlermeldung bei zweitem MainMenu
Zitat:
(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 |
AW: Fehlermeldung bei zweitem MainMenu
Zitat:
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? |
AW: Fehlermeldung bei zweitem MainMenu
Zitat:
-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. |
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.
|
AW: Fehlermeldung bei zweitem MainMenu
Hallo,
Zitat:
Ich habe gerade mal ein kleines Bsp.-Programm mit 2 Forms erzeugt -> kein Fehler. |
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:
Form1 (wo eine der Funktionen genutzt wird):
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;
Delphi-Quellcode:
Form2:
procedure TForm1.Button3Click(Sender: TObject);
begin if einlesenZahlen(ListBox1) then begin Form2.Show; end; end;
Delphi-Quellcode:
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.
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; Langsam bin ich echt ratlos :mad: |
AW: Fehlermeldung bei zweitem MainMenu
Ich wiederhole:
Zitat:
|
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:27 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