![]() |
Re: zugriffsverletzung bei aufruf von destroy
danke
wo steht denn das alles? allerdingst geht es immer noch nicht...hab nämlich vergessen zu erwähnen, dass owner gar kein tform ist, sonder ein tdatamodule :oops: |
Re: zugriffsverletzung bei aufruf von destroy
Wenn ein Datenmodul Owner der ChildForms ist, dann geht das hier:
Delphi-Quellcode:
marabu
procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin with Owner as TDataModule do if Tag = 0 then begin Tag := 1; Free; end else Action := caFree; end; |
Re: zugriffsverletzung bei aufruf von destroy
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
aber ich habe mal das Projekt hochgeladen. die anwendung geht eigentlich nur, wenn man firebird 1.5 installiert hat, aber ich hab mal den entsprechenden code zum öffnen der datenbank weggemacht..also einfach mal auf datei-öffnen-wörterbuch gehen und dann die beigefügte empty.fdb öffnen..darauf öffnen sich 2 formulare..wenn ihr eins der beiden formulare schließt, kommt die meldung von der ich rede...vllt weiß ja einer von euch weiter... gruß und danke, martin |
Re: zugriffsverletzung bei aufruf von destroy
Was heißt geht nicht? Kannst du es nicht kompilieren? Gibt es einen Laufzeitfehler?
Wo in deinem Projekt steckt der Code, der ein Datenmodul zum Owner einer Form macht? marabu |
Re: zugriffsverletzung bei aufruf von destroy
doch kompilieren und ausführen geht
aber mach doch mal genau das was ich vorhin meinte: starte das programm und klick auf datei->öffnen->wörterbuch (die paar meldungen die da kommen, einfach ignorieren) dann sollten sich bei dir 2 mdi-childs öffnen und jetzt schließe mal eins der beiden fenster! |
Re: zugriffsverletzung bei aufruf von destroy
Martin, das geht nicht. Dein Projekt kann ich auf meiner Maschine nicht kompilieren, da du Units einbindest, die bei mir nicht existieren.
Aber unabhängig davon - beim klick auf Wörterbuch soll ein Datenmodul erzeugt werden. Dieses Datenmodul hat keinen event handler für OnCreate() und deshalb können auch keine 2 ChildForms entstehen - oder? Hast du dein eigenes Demo-Projekt mal in einem eigenen Verzeichnis entpackt und kompiliert? marabu |
Re: zugriffsverletzung bei aufruf von destroy
Liste der Anhänge anzeigen (Anzahl: 1)
jetz merk ich grad
das kann ja bei euch gar nicht funzen, da war ein dateiverweis falsch jetz nochmal also bitte nochmal: datei->öffnen->wörterbuch (die paar meldungen die da kommen, einfach ignorieren) dann sollten sich bei dir 2 mdi-childs öffnen und jetzt schließe mal eins der beiden fenster! sorry deswegen nochmal gruß martin |
Re: zugriffsverletzung bei aufruf von destroy
Hallo Martin,
so geht es jetzt:
Delphi-Quellcode:
marabu
procedure TLitForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin with Owner as TDataModule do begin RemoveComponent(self); Free; end; Action := caFree; end; |
Re: zugriffsverletzung bei aufruf von destroy
ah, jetzt klappt das...
darf ich mal fragen wie du drauf gekommen bist? außerdem wundert mich folgendes: wenn ich die komponente noch erst selbst aus der komponentenliste entfernen muss, warum muss ich dann nicht vorher auch noch alle anderen komponenten aus der liste entfernen, sondern nur das formular, bei dem onclose aufgerufen wurde? hab mal ein bisschen rumgespielt und das
Delphi-Quellcode:
von dir entfernt und dafür einen ondestroy-handler für das datenmodul reingeschrieben, das folgendes macht:
RemoveComponent(self);
Delphi-Quellcode:
verhält sich aber sehr eigenartig, weil da nur das aufrufende formular, nicht aber das andere geschlossen wird...
procedure TDataModule1.DataModuleDestroy(Sender: TObject);
begin while (self.ComponentCount > 0) do begin self.RemoveComponent(self.Components[0]); end; end; [edit]ach ich verstehe: beim aufruf von free für den owner wird automatisch close() für alle anderen formulare ausgeführt, was diese komponenten auch wieder verschwinden lässt, oder?..trotzdem meine frage aus zeile 2 (s.o. in diesem post): darf ich mal fragen wie du drauf gekommen bist?[/edit] |
Re: zugriffsverletzung bei aufruf von destroy
Lieber Martin,
ich programmiere seit etwa 30 Jahren. Ich komme nicht auf etwas - ich erinnere mich nur. Manchmal besser, manchmal schlechter. In letzter Zeit immer schlechter. Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 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-2025 by Thomas Breitkreuz