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
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von akurka
akurka

Registriert seit: 30. Dez 2008
Ort: Schweiz, 8636 Wald ZH
81 Beiträge
 
Delphi 7 Personal
 
#1

OnClose , action caFree oder caHide

  Alt 12. Jan 2016, 14:45
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 ?
Anton Kurka
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: OnClose , action caFree oder caHide

  Alt 12. Jan 2016, 14:54
Um Form2 zu schließen, musst du irgendwo Form2.Close aufrufen, dann geht er auch dort in OnClose rein.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: OnClose , action caFree oder caHide

  Alt 12. Jan 2016, 14:56
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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: OnClose , action caFree oder caHide

  Alt 12. Jan 2016, 16:46
.... 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.
Und wenn ein Formular mehr als nur ein Image beinhaltet, gibt's ja immer noch die Möglichkeit, Frames zu verwenden
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#5

AW: OnClose , action caFree oder caHide

  Alt 12. Jan 2016, 16:59
Um Form2 zu schließen, musst du irgendwo Form2.Close aufrufen, dann geht er auch dort in OnClose rein.
Jupp, er hat auch nicht geschrieben, wie er die Fenster wieder zu macht.
Ein Form.Free ruft kein OnClose/OnCloseQuery auf.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von akurka
akurka

Registriert seit: 30. Dez 2008
Ort: Schweiz, 8636 Wald ZH
81 Beiträge
 
Delphi 7 Personal
 
#6

AW: OnClose , action caFree oder caHide

  Alt 12. Jan 2016, 18:25
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:
Heute, 15:54 by baumina
[Zitat]
vor 2 Stunden
Um Form2 zu schließen, musst du irgendwo Form2.Close aufrufen, dann geht er auch dort in OnClose rein.
andern trennen.

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.
Anton Kurka
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#7

AW: OnClose , action caFree oder caHide

  Alt 12. Jan 2016, 19:11
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
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: OnClose , action caFree oder caHide

  Alt 13. Jan 2016, 05:32
Hallo,
caHide und caFree haben eigentlich nur in MDI-Anwendungen eine Daseinsberechtigung..


Heiko
Heiko
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: OnClose , action caFree oder caHide

  Alt 13. Jan 2016, 12:10
Wo rufst Du denn Form2.Close auf, wenn das aufgerufen wird, dann wird auch das Ereignis onClose aufgerufen.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#10

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
Antwort Antwort
Seite 1 von 2  1 2      

 

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 05:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz