Einzelnen Beitrag anzeigen

backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
335 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Speicherzugriffsfehler bei Freigabe vom Frame

  Alt 26. Apr 2007, 17:27
Zitat von shmia:
Zitat von backdraft:
Mit dem nicht auf nil setzen verstehe ich nicht. Ich habe doch "aFrame := nil;" gemacht. Warum geht das nicht so?
Deine Funktion bekommt den Parameter aFrame: TFrame ja per Value übergeben.
Man müsste schon var aFrame: TFrame schreiben, damit das Nil setzen eine Auswirkung
auf die übergebene Variable hat.

Zum Thema SetFocus:
Wenn das Formular nicht sichtbar ist, dann muss man SetFocus weglassen.

Weitere Vorgehensweise:
Ich würde statt deinen vorhandenen Frames nur einen ganzen einfachen Frame mit einem TEdit und TLabel drauf
in das Projekt einfügen. Keine Events benützen, Konstruktor und Destruktor des Frames nicht überschreiben.
So lässt sich feststellen, ob dass Problem innerhalb eines bestimmten Frames liegt ober ob du grundsätzlich
einen Fehler gemacht hast.
Also ich habe ein paar neue Erkenntnisse, die mich nicht wirklich weiterbringen.

Es sind insgesamt 7 verschiedene Frames. Wenn ich bei diesen 7 Frames den Parent nicht setze funktioniert das Programm fehlerfrei, ausser dass ich das Frame halt nicht sehe.

Bei 3 dieser Frames kann ich den Parent setzen und mit dem neuen FreeAndNil funktioniert auch das freigeben super.

4 der Frames, die sich von den Komponenten nicht sonderlich unterscheiden (es sind alle komponenten von den 4 frames auch irgendwo auf den 3 funktionierenden) klappen nicht, sobald ich den Parent einstelle.

Alle Frames haben den selben Constructor.

Das Beispielframe funktioniert auch (mit dem Edit und so).

Komischerweise ist, wenn ich NUR eins der 4 frames, ohne die anderen 3 mache geht es auch. sobald ich aber ein zweites frame dynamisch erstelle ist ende.

Jetzt der Hammer... Wenn ich den Constructor nicht ändere und Delphi das erstellen / zerstören überlasse (also nicht dynamisch) funktioniert es. Den Parameter, den ich im Constrcutor zusätzlich übergeben habe, setze ich an der Stelle, wo vorher das Frame kreiert wurde.

Das hilft mir aber nicht, da ich das Frame dynamisch erstellen muss.
Oliver
  Mit Zitat antworten Zitat