Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zugriffsverletzung nach Einbau einer Groupbox (https://www.delphipraxis.net/147709-zugriffsverletzung-nach-einbau-einer-groupbox.html)

KPBecker 14. Feb 2010 18:19


Zugriffsverletzung nach Einbau einer Groupbox
 
Hallo Delphi-Praktiker,

Ich starte mein Programm, drücke auf einen Knopf und eine Application.Messagebox kommt hoch. Wunderbar, kein Problem!

Jetzt setze ich irgendwo direkt auf das Formular oder ein untergeordnetes Panel eine neue Groupbox, mit der noch nichts weiter gemacht wird. Dann starte ich das Programm, drücke auf den Knopf und beim Aufruf von Application.MessageBox kommt jetzt eine Fehlermeldung: "Zugriffsverletzung bei Adresse 00469B1E in Modul 'Hauptprogramm.exe'. Lesen von Adresse 00000008.".

Die Fehlermeldung hängt offensichtlich mit Application.xxx zusammen:
Das Programm läuft dann auf einen Fehler, wenn irgendetwas mit Application ausgeführt wird. Wenn ich die Messagebox auskommentiere, kommt es bei Application.Run zum Fehler. Wenn ich vorher Application.ProcessMessages aufrufe, eben da.

Das Witzige ist, dass es funktioniert, wenn ich statt der Groupbox ein Panel oder ein Label oder eine Combobox etc. verwende.
An anderer Stelle werden schon mehrere Groupboxen auch auf Panels verwendet, ohne dass es zum Fehler kommt. Nur eben eine zusätzliche wird jetzt, egal wo, nicht mehr toleriert.

Wichtig noch: Die Aktionen nach dem ButtonClick haben Nichts mit dem Programmteil zu tun, in dem die GroupBox vorkommt.

Hat mein Delphi auf einmal eine Aversion gegen Groupboxen? An einer Maximalzahl für GBen kann es nicht liegen.

Die Sache ist in diesem Programm reproduzierbar: GB ausgebaut --> alles in Ordnung; wieder eingebaut --> Fehler.

Das Programm ist mehrere 1000 Zeilen lang, daher kann ich es leider nicht hier posten. In einem kleinen Testprogramm konnte der Fehler nicht reproduziert werden.

Hilfe !

Beste Grüße
Klaus-Peter

haentschman 14. Feb 2010 18:34

Re: Zugriffsverletzung nach Einbau einer Groupbox
 
hmmm... die Info´s sind etwas dürftig. :gruebel:
Zitat:

Wenn ich die Messagebox auskommentiere, kommt es bei Application.Run zum Fehler
- Zeig uns einfach mal die HAUPTPROGRAMM.DPR deines Projektes
- welche Formulare gibt es ?
- welche Formulare erzeugst du dynamisch ?
- auf welchem Formular sind die Groupboxen die "funktionieren" und wo nicht ?

...wäre mal ein Anfang :zwinker:

SirThornberry 14. Feb 2010 19:18

Re: Zugriffsverletzung nach Einbau einer Groupbox
 
Die Adresse verrät das du auf ein nicht instanziertes Objekt zugreifst. Du hast also irgendwo vergessen mit TIrgendwas.Create() ein Object zu erstellen bevor du darauf zugreifst.

KPBecker 15. Feb 2010 19:53

Re: Zugriffsverletzung nach Einbau einer Groupbox
 
Hallo Jens,

Zitat:

Die Adresse verrät das du auf ein nicht instanziertes Objekt zugreifst. Du hast also irgendwo vergessen mit TIrgendwas.Create() ein Object zu erstellen bevor du darauf zugreifst.
Ob der Fehler auftritt oder nicht, hängt nur davon ab, ob ich noch diese eine Groupbox einbaue oder nicht. Es wird aber nie auf diese Groupbox zugegriffen, der Fehler (EAccessViolation...) tritt an einer ganz anderen Stelle beim Aufruf von Application.Messagebox (in UZModVerw s.u.) auf.


Hallo haentschman,

Zitat:

- welche Formulare gibt es ?
- welche Formulare erzeugst du dynamisch ?
- auf welchem Formular sind die Groupboxen die "funktionieren" und wo nicht ?
Ich verwende nur ein Formular, das nicht dynamisch erzeugt wird. Alle Groupboxen sind auf diesem Formular fest integriert, keine erzuge ich zur Laufzeit. (Die Anzeigen steuere ich über Visible:= true/false)
Alle Komponenten stehen in UHauptteil.

Zitat:

- Zeig uns einfach mal die HAUPTPROGRAMM.DPR deines Projektes
Delphi-Quellcode:
program Hauptprogramm;

uses
  Forms,
  UHauptteil in 'UHauptteil.pas' {fmHauptteil},
  UKonstanten1 in 'UKonstanten1.pas',
  UHandlung_PT in 'UHandlung_PT.pas',
  UZModDef in 'UZModDef.pas',
  UModell in 'UModell.pas',
  UZModVerw in 'UZModVerw.pas',
  UZHandlung_PT in 'UZHandlung_PT.pas',
  UZKofaktoren in 'UZKofaktoren.pas',
  UKofaktoren in 'UKofaktoren.pas',
  UZPerson_PT in 'UZPerson_PT.pas',
  UPerson_PT in 'UPerson_PT.pas',
  UZGebiet_PT in 'UZGebiet_PT.pas',
  UGitter in 'UGitter.pas',
  UHilfsmethoden in 'UHilfsmethoden.pas',
  UGebiet_PT in 'UGebiet_PT.pas',
  UZRegion_PT in 'UZRegion_PT.pas',
  URegion_PT in 'URegion_PT.pas',
  UZModSim in 'UZModSim.pas',
  USimInit in 'USimInit.pas',
  URegion in 'URegion.pas',
  USimMethoden1 in 'USimMethoden1.pas',
  USimMethoden2 in 'USimMethoden2.pas',
  UStatistik in 'UStatistik.pas',
  UGesamt in 'UGesamt.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfmHauptteil, fmHauptteil);
  Application.Run;
end.
Beste Grüße
Klaus-Peter

hoika 15. Feb 2010 20:02

Re: Zugriffsverletzung nach Einbau einer Groupbox
 
Hallo,

Zitat:

Ob der Fehler auftritt oder nicht, hängt nur davon ab, ob ich noch diese eine Groupbox einbaue oder nicht.
Es liegt nicht an der GroupBox.
Du machst irgendwas anderes falsch,
zufällig wird das durch die GroupBox aber hervorgerufen.

Ich würde erst mal FastMM4 oder MemCheck als Mem-Manager laufen lassen,
der zeigt dir ein paar "mögliche Fehler ab".

Was ist mit Compiler Warnungen ?

Wenn wir helfen sollen,
brauchen wir ein Minimal-Projekt, was den Fehler zeigt.


Heiko

haentschman 15. Feb 2010 20:19

Re: Zugriffsverletzung nach Einbau einer Groupbox
 
Ich stimme meinem Vorredner zu. Auf den ersten Blick sehen deine Info´s nicht ungewöhnlich aus. :gruebel:

:hi:

KPBecker 16. Feb 2010 16:31

Re: Zugriffsverletzung nach Einbau einer Groupbox
 
Hallo Delphi-Praktiker,

Ihr hattet Recht, es lag nicht an der Groupbox. Es kam dadurch, dass ich aus einer Datei ein zweidimensionales dynamisches Array "auf einen Schlag" auslesen wollte. Jetzt, da ich das Array zeilenweise schreibe und lese, funktioniert es. Warum der Fehler gerade bei Application.xxx auftrat, nachdem ich die Groupbox eingebaut hatte, ist mir allerdings schleierhaft.

Der Tipp mit dem Speichermanager FastMM4 war sehr gut, dadurch konnte ich einige Speicherlecks beheben.

Vielen Dank
Klaus-Peter


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr.

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