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/)
-   -   Zugriffsverletzung bei Minimieren-schließen (https://www.delphipraxis.net/116741-zugriffsverletzung-bei-minimieren-schliessen.html)

Overclocker 5. Jul 2008 15:16


Zugriffsverletzung bei Minimieren-schließen
 
Hi,

habe folgendes Problem:
Habe eine MDI Anwendung die folgendermaßen aussieht:

Links ist ein Menü mit alphacontrols komponente und rechts ist dann sozusagen mein MDI Child.

Wenn ich jetzt das child schließe, kommt keine Fehlermeldung.
Wenn ich das child allerdings minimiere (also das fenster verkleiner) und dann schließe, kommt jedes mal eine zugriffsverletzung.

woran liegt das? er führt doch im endeffekt das normale close durch und wieso macht er nur bei minimiertem fenster probleme?

dankeschön

Grüße

_frank_ 5. Jul 2008 15:27

Re: Zugriffsverletzung bei Minimieren-schließen
 
ich denke ohne den kompletten quelltext (am besten nach eingrenzung) oder zumindest de genaue Fehlermeldung können wir nur rätseln...

ist es eine Zugriffsverletzung mit lesen/schreiben auf 0x0 oder an einer komisch aussehenden adresse (z.b. 0x0000C00)?

wenn nicht wird man das step by step debuggen müssen, wo wir wieder beim quellcode wären :)

hast das mal ohne das alphacontrols-menü probiert? bzw mit einer leeren anwendung nur mit diesem menü...

Gruß Frank

Overclocker 5. Jul 2008 15:34

Re: Zugriffsverletzung bei Minimieren-schließen
 
folgenden code mach ich bei onclose
Delphi-Quellcode:
freeandnil(fenster2);
Folgende Zugriffsverletzung:
Im Projekt test.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: ' Zugriffsverletzung bei Adresse 0041B108 in Modul 'Test.exe'. Lesen von Adresse 00000008'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

Wenn ich mit F8 jede Anweisung einzeln durchgeh, kommt eben die Zugriffsverletzung bei der onclose-Ausführung.



ohne dem menü hab ichs noch nicht versucht nein, weil in dem prog ziemlich viel daran hängt.

_frank_ 5. Jul 2008 16:37

Re: Zugriffsverletzung bei Minimieren-schließen
 
hast du fenster2 ohne owner erstellt? weil wenn du als owner ein anderes formular angibst wird es automatisch freigegeben (vom Owner halt).

machst du irgendwas im destructor/onclose von fenster2?

die Zugriffsverletzung sieht jedenfalls stark nach einer un- bzw. falsch initalisierten variable aus...evtl. wurde das formular vorher freigegeben....sollte aber auch im nich-minimierten Modus fehlschlagen.

nur mal so zur Erklärung...
die 8 sieht deswegen komisch aus, weil in der 32-bit-adresse nur 1 bit (bit 3) gesetzt ist, daher eher auf eine konstante/flag deutet. evtl wurde die fensteradresse mit genau dieser 8 überschrieben, warum auch immer. evtl. kannst du den ausdruck überwachen und so schauen, wann das passiert.

Gruß Frank

Overclocker 5. Jul 2008 16:39

Re: Zugriffsverletzung bei Minimieren-schließen
 
im onclose von fenster2 ist eben das freeandnil

aber jetzt fängt mein problem schon an, habe noch nie mit ownern gearbeitet :oops:

was ist das und wie geht sowas????

danke für die hilfe!!!

_frank_ 5. Jul 2008 16:45

Re: Zugriffsverletzung bei Minimieren-schließen
 
naja, woher hast du fenster2? das erstellst ja irgendwo per hand (fenster2:=TForm2.create(...) oder so ähnlich).
die 3 punkte sind der owner ;) (auf deutsch Eigentümer), wenn der Owner freigegeben wird, gibt er seine untertanen auch frei. daher musst/darfst du das in dem Fall nicht separat machen.

die formulare, die durch die anwendung erstellt werden (Application.CreateForm() in der dpr) werden auch automatisch freigegeben.

HTH Frank

Overclocker 5. Jul 2008 16:49

Re: Zugriffsverletzung bei Minimieren-schließen
 
das fenster erstell ich ganz normal und lass es aber erst im programm selber erstellen mit

Delphi-Quellcode:
application.createform(Tfenster2,fenster2);
aber was muss mich jetzt wo freigeben??sonst ist dieses fenster nirgends verknüpft oder ähnliches

ich erzeug es einfach so und im onclose mach ich freeandnil...

_frank_ 5. Jul 2008 16:58

Re: Zugriffsverletzung bei Minimieren-schließen
 
dadurch, dass du es über die application-instanz erstellst, brauchst du das imho nicht freigeben...das macht die anwendung selbst. wie die anderen Forms auch.
[oh]TApplication.CreateForm
...
Der Eigentümer des neuen Formulars ist die Anwendung.[/oh]

[oh]TComponent.Create
...
Für manuell (also nicht im Formular-Designer) erzeugte Komponenten rufen Sie Create auf und übergeben die übergeordnete Komponente im Parameter AOwner. Der Eigentümer löst die Komponente auf, wenn er selbst aufgelöst wird. Wenn die Komponente keinen Eigentümer hat, rufen Sie Free auf, um sie aufzulösen.[/oh]

warum der effekt nur im minimierten Zustand auftritt ist mir allerdings ein Rätsel.

Gruß Frank

DP-Maintenance 5. Jul 2008 17:49

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Es geht um Delphi. Und ich ordne das mal als allgemeines Delphi-Sprachproblem ein.

Overclocker 6. Jul 2008 13:05

Re: Zugriffsverletzung bei Minimieren-schließen
 
noch jemand eine idee woran das liegen könnte???


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz