![]() |
OnClose , action caFree oder caHide
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. 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. 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 ? |
AW: OnClose , action caFree oder caHide
Um Form2 zu schließen, musst du irgendwo Form2.Close aufrufen, dann geht er auch dort in OnClose rein.
|
AW: OnClose , action caFree oder caHide
Falls du die globale Variable "Form2" benutzt, dann kannst du nur froh sein, dass dir das Programm bei caFree nicht um die Ohren fliegt.
Das Beste wäre wenn du alle globalen Form-Variablen bis auf die vom Hauptformular löschst, dann kommst du gar nicht erst in Versuchung. EDIT: Wenn es ist wie baumina sagt, dann fehlt dir tatsächlich nur ein Close. Aber auch da solltest du (höchstwahrscheinlich) nicht auf die globalen Formvariablen zugreifen. Ich bin mir nicht ganz sicher wie deine Situation ist, aber ich würde für deinen 16 Formularen 1 Formular machen mit einem TImage. Je nach Stellungen des Drehschalters lädst du andere Bilder in das Image dieses Formulars. Ob du nun beim Schließen des Forms das Formular freigibst (und beim nächsten Anzeigen vorher wieder erstellst) oder es nur unsichtbar machst, sollte soweit ich das mit diesen Infos beurteilen kann relativ egal sein. |
AW: OnClose , action caFree oder caHide
Zitat:
|
AW: OnClose , action caFree oder caHide
Zitat:
Ein Form.Free ruft kein OnClose/OnCloseQuery auf. |
AW: OnClose , action caFree oder caHide
Hallo Neutral General
Ja da hast Du schon recht mit einem Timage, nun ist es so, dass es innerhalb des jeweiligen Frames schon mehrere Bilder gibt. Es sind nicht Bilder im herkömlichen Sinn sondern Menüs mit Edit, Memos, und grafischen Anzeigen. Wegen der übersichtlichkeit des Programms will ich die einzelne Drehschalter Stellungen : (sprich Betriebsarten der Steuerung) von ein andern trennen. ----------------------- Zitat:
Ja genau das habe ich gemacht : im Form2 steht : procedure TForm2.OnClose(Sender: TObject; var Action: TCloseAction); begin Action:= caHide;// pribiert habe ich auch mit caFree end; Es funktioniert aber nicht, der Formular bleibt Leer auf dem Bildschirm stehen. Wenn ich der Wahlschalter wieder zurück schalte, lauft der Form2 wieder weiter, d.h Bild baut sich wieder auf und alle Anzeigen funktionieren. ich habe es auch im Hauptformular probiert mit dem OnClose, das gab ein Programmabsturz. Auch wenn es so gegangen wäre, ist dieser Lösung sehr ungünstig. |
AW: OnClose , action caFree oder caHide
Hallo,
wie wäre es, einfach vor dem Anzeigen (ich vermute mal mit Show) der ausgewählten Form erst mal alle zu hiden? also:
Delphi-Quellcode:
Form1.Hide;
Form2.Hide; ... //und ab hier die Anzeige abhängig der Drehschalterstellung |
AW: OnClose , action caFree oder caHide
Hallo,
caHide und caFree haben eigentlich nur in MDI-Anwendungen eine Daseinsberechtigung.. Heiko |
AW: OnClose , action caFree oder caHide
Wo rufst Du denn
Delphi-Quellcode:
auf, wenn das aufgerufen wird, dann wird auch das Ereignis onClose aufgerufen.
Form2.Close
|
AW: OnClose , action caFree oder caHide
Zitat:
Zitat:
Zitat:
Individuelle Initialisation kannst du zum Beispiel im OnShow-Ereignis des jeweiligen Formulars aufrufen. Beim Schalten deines Drehschalters sollte etwa das ablaufen:
Delphi-Quellcode:
FAktivesForm ist eine Variable, in der du dir das jeweils aktive Formular merkst.
FAktivesForm.Hide;
FAktivesForm := GetFormular(Drehschalter.Stellung); FAktivesForm.Show; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 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