![]() |
Zugriffverletzung beim Schliessen eines Formulars
Hallo,
ich könnte mal wieder eure Hilfe gebrauchen. Folgender Code wird nach dem Öffnen eines Child-Formulars aufgerufen:
Delphi-Quellcode:
LoadFromFile lädt u. a. Bilder und zeigt sie auf dem Formular in zur Laufzeit erzeugten TImage-Komponeneten an.
procedure TFmAlbum.LoadAlbum(fn: string);
begin if Alb <> nil then Alb.Free; Alb := TAlbum.Create(Self); // Alb ist public in FmAlbum vereinbart. Alb.LoadFromFile(fn); end; Das Formular wird mit folgendem Code geschlossen:
Delphi-Quellcode:
Nun das Problem:
procedure TFmAlbum.FormDestroy(Sender: TObject);
begin if Alb <> nil then Alb.Free; end; Die Prozedur LoadFromFile braucht ein paar Sekunden bis alles geladen, berechnet und angezeigt ist. Wenn in dieser Zeit das Formular mit dem BorderIcon biSystemMenu geschlossen wird, wird Alb im FormDestroy freigegeben, obwohl LoadFromFile noch läuft. Dies führt logischerweise zu Zugriffverletzungen. Ich könnte diese Zugriffverletzungen mit try ... except abfangen. Das ist aber bestimmt nicht der richtige Weg. Wie kann ich das Formular ohne Fehler schließen? Schon mal Danke für die Hilfe. Gruß Klaus. |
Re: Zugriffverletzung beim Schliessen eines Formulars
Du könntest das ganze in einen Thread packen und dann dem Programm Zeit geben, die Sachen fertig zu laden ...
|
Re: Zugriffverletzung beim Schliessen eines Formulars
Hi,
der Fehler
Delphi-Quellcode:
Alb bekommt als Owner Self (dein Formular).
Alb := TAlbum.Create(Self);
Somit wird das Form Alb zerstören. Du versuchst das auch noch:
Delphi-Quellcode:
Ist das Formular schneller, dann knallts.
if Alb <> nil
then Alb.Free; Davon abgesehen ist das mit der Public variablen ...na ja... Cu, Frank [EDIT] Also, das laden hat im Create nichts zu suchen. Ich nutze immer Application.onIdle, aber man kann auch im Form.OnShow (mit Variablen, um ein 2. Laden zu verhindern) oder wie auch immer das Bild laden. Warum hast du überhaupt die Variable und die Prüfung auf nil (obwohl du beim Zerstören Alb nicht nil setzt)? |
Re: Zugriffverletzung beim Schliessen eines Formulars
@dataspider
Hallo Frank, Danke für deine Antwort. Zitat:
Zitat:
Zitat:
Gruß Klaus. @quendolineDD Hallo, Zitat:
Danke für deine Antwort. Gruß Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:22 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