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/)
-   -   Delphi zugriffsverletzung bei aufruf von destroy (https://www.delphipraxis.net/69887-zugriffsverletzung-bei-aufruf-von-destroy.html)

sancho1980 21. Mai 2006 21:48


zugriffsverletzung bei aufruf von destroy
 
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:

Delphi-Quellcode:
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

Zacherl 21. Mai 2006 22:00

Re: zugriffsverletzung bei aufruf von destroy
 
Warscheinlich ist beim ersten Fenster der Owner undefiniert. Einfach mal mit try .. except .. end abzufangen versuchen.

Florian

Luckie 21. Mai 2006 22:04

Re: zugriffsverletzung bei aufruf von destroy
 
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.

sancho1980 21. Mai 2006 22:15

Re: zugriffsverletzung bei aufruf von destroy
 
ok, hab ich probiert

das ändert leider auch nichts :|

SirThornberry 21. Mai 2006 22:23

Re: zugriffsverletzung bei aufruf von destroy
 
hast du mal haltepunkte gesetzt und/oder durchgestept bei welchen Befehlen im Destroy die AV kommt?

Zacherl 21. Mai 2006 22:24

Re: zugriffsverletzung bei aufruf von destroy
 
Alternativ zum Free aus Lukies Beitrag:

Delphi-Quellcode:
if Self.Owner <> nil then
  Self.Owner.Destroy;

sancho1980 21. Mai 2006 22:45

Re: zugriffsverletzung bei aufruf von destroy
 
Zitat:

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?

marabu 22. Mai 2006 05:02

Re: zugriffsverletzung bei aufruf von destroy
 
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

sancho1980 22. Mai 2006 10:24

Re: zugriffsverletzung bei aufruf von destroy
 
Zitat:

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

marabu 22. Mai 2006 10:56

Re: zugriffsverletzung bei aufruf von destroy
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 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-2025 by Thomas Breitkreuz