AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein OnClose , action caFree oder caHide
Thema durchsuchen
Ansicht
Themen-Optionen

OnClose , action caFree oder caHide

Ein Thema von akurka · begonnen am 12. Jan 2016 · letzter Beitrag vom 16. Jan 2016
 
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#8

AW: OnClose , action caFree oder caHide

  Alt 13. Jan 2016, 14:21
Hallo,
Von der Form1 werden je nach Stellung eines Drehschalters (OnChange)
proceduren von verschiedene Forms (z.Bsp Form2.man, Form3.Prog usw) )aufgerufen. Alle diese Forms beinhalten ein anderes Image. Das funktioniert soweit problemlos.
Das funktioniert nur deshalb, weil dein Projekt so eingestellt ist, beim Programmstart alle Formulare zu erzeugen und den Variablen Form1 .. FormX zuzuweisen.

Beim Starten des Programms wird standartmässig Form2.Man aufgerufen.
Beim Wechsel des Drehschalters wird dann z.Bsp Form3.Prog aufgerufen.
Da es 16 Stellungen des Drehschalters gibt, sind es auch 16 Formulare
die aktiviert werden können.

Im Form2 habe ich OnClose verwendet mit caFree oder caHide. Die Form2
wird aber nicht gelöscht nach dem Drehschalterwechsel(das Image wurde teilweise entfernt)also die Form2 offenbar nicht freigegeben.
In dieser Konstellation darfst du die Formulare auch nicht löschen (caHide ist Standardbelegung, caFree unzulässig). Ist das Formular "Form2" freigegeben, würde die Variable "Form2" auf einen ungültigen Speicherbereich verweisen. Der Aufruf von "Form2.man" kann dann schon zum Programmabsturz führen. Da der Speichermanager freigegebene Objekte nicht sofort löscht, fallen solche Fehler oft erst später auf. In diesem Fall scheint Form2 noch teilweise da zu sein, aber das Programm kann jederzeit abstürzen, wenn der Speichermanager diesen Speicher für etwas anderes braucht.

Bei jedem umschalten wird dann eine neue Form aufgerufen.
Gemäss verschiedene Forenbeiträge müsste OnClose funktionieren, es tut aber nicht. Woran liegt es ?
Formulare werden mit "Show" angezeigt und mit "Hide" ausgeblendet.
Individuelle Initialisation kannst du zum Beispiel im OnShow-Ereignis des jeweiligen Formulars aufrufen.
Beim Schalten deines Drehschalters sollte etwa das ablaufen:
Delphi-Quellcode:
  FAktivesForm.Hide;
  FAktivesForm := GetFormular(Drehschalter.Stellung);
  FAktivesForm.Show;
FAktivesForm ist eine Variable, in der du dir das jeweils aktive Formular merkst.
  Mit Zitat antworten Zitat
 

 

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 19:08 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