![]() |
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 |
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 |
Re: Zugriffsverletzung bei Minimieren-schließen
folgenden code mach ich bei onclose
Delphi-Quellcode:
Folgende Zugriffsverletzung:
freeandnil(fenster2);
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. |
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 |
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!!! |
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 |
Re: Zugriffsverletzung bei Minimieren-schließen
das fenster erstell ich ganz normal und lass es aber erst im programm selber erstellen mit
Delphi-Quellcode:
aber was muss mich jetzt wo freigeben??sonst ist dieses fenster nirgends verknüpft oder ähnliches
application.createform(Tfenster2,fenster2);
ich erzeug es einfach so und im onclose mach ich freeandnil... |
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
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. |
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. |
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