AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi zugriffsverletzung bei aufruf von destroy
Thema durchsuchen
Ansicht
Themen-Optionen

zugriffsverletzung bei aufruf von destroy

Ein Thema von sancho1980 · begonnen am 21. Mai 2006 · letzter Beitrag vom 22. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2      
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#1

zugriffsverletzung bei aufruf von destroy

  Alt 21. Mai 2006, 22:48
hallo

ich habe folgendes problem:

habe eine mdi-anwendung mit mehreren formularen, wobei ein der formulare der owner von allen anderen formularen ist.
jetz wollte ich erreichen, dass wenn irgendeins der formulare geschlossen wird, alle anderen auch geschlossen werden, also hab ich in die procedure zum onclose-ereignis der einzelnen formulare reingeschrieben:

self.Owner.Destroy() da schließt sich dann zwar alles so wie ich will, aber leider bekomm ich da auch immer gleich so eine hässliche meldung von wegen "zugriffsverletzung"...was mach ich da falsch?

danke,

martin
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: zugriffsverletzung bei aufruf von destroy

  Alt 21. Mai 2006, 23:00
Warscheinlich ist beim ersten Fenster der Owner undefiniert. Einfach mal mit try .. except .. end abzufangen versuchen.

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: zugriffsverletzung bei aufruf von destroy

  Alt 21. Mai 2006, 23:04
Oder einfach mal die Delphi Hilfe lesen:
Zitat:
Do not call Destroy directly. Call Free instead. Free verifies that the object reference is not nil before calling Destroy.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#4

Re: zugriffsverletzung bei aufruf von destroy

  Alt 21. Mai 2006, 23:15
ok, hab ich probiert

das ändert leider auch nichts
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: zugriffsverletzung bei aufruf von destroy

  Alt 21. Mai 2006, 23:23
hast du mal haltepunkte gesetzt und/oder durchgestept bei welchen Befehlen im Destroy die AV kommt?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: zugriffsverletzung bei aufruf von destroy

  Alt 21. Mai 2006, 23:24
Alternativ zum Free aus Lukies Beitrag:

Delphi-Quellcode:
if Self.Owner <> nil then
  Self.Owner.Destroy;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#7

Re: zugriffsverletzung bei aufruf von destroy

  Alt 21. Mai 2006, 23:45
Zitat von SirThornberry:
hast du mal haltepunkte gesetzt und/oder durchgestept bei welchen Befehlen im Destroy die AV kommt?
mal ne dumme frage: da müsst ich ja die unit aufmachen, wo das destroy drinsteht...wie find ich n die?
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: zugriffsverletzung bei aufruf von destroy

  Alt 22. Mai 2006, 06:02
Hallo Martin,

normalerweise ist die Application der Owner, aber egal. Am Beispiel des Templates aus dem Objekt Repository geht es so:

Delphi-Quellcode:
procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  with Application do
    if not Terminated then
      Terminate;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#9

Re: zugriffsverletzung bei aufruf von destroy

  Alt 22. Mai 2006, 11:24
Zitat von marabu:
normalerweise ist die Application der Owner, aber egal.
Das geht bei mir leider nicht, weil ich meine Anwendung folgendermaßen gestaltet habe: öffnet der user eine datei, dann wird EIN formular erzeugt (sozusagen das hauptformular für diese eine datei die grad geöffnet wird), welches wiederum mehre andere dazugehörige formulare erzeugt (denen es sich selbst als owner übergibt). es können aber trotzdem mehrere dateien geöffnet sein, was dann heißt, dass sich natürlich pro geöffnetem file die anzahl der fenster verdoppelt. wenn jetzt EIN formular vom user geschlossen wird, will ich, dass ALLE diejenigen formulare zerstört werden, die auch mit der gleichen dateiöffnung zusammenhängen; deswegen hab ich das über den owner gemacht...


grüße,

martin
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: zugriffsverletzung bei aufruf von destroy

  Alt 22. Mai 2006, 11:56
Ohne MDI-Formulare geht es so:

Delphi-Quellcode:
procedure TParentForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Release;
end;

procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  with Owner as TForm do
    PostMessage(Handle, WM_CLOSE, 0, 0);
end;
marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 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