AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit caHide im OnClose der Form

Ein Thema von oki · begonnen am 8. Feb 2007 · letzter Beitrag vom 9. Feb 2007
Antwort Antwort
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#1

Problem mit caHide im OnClose der Form

  Alt 8. Feb 2007, 17:21
Hi,

nun versteh ich die Welt nicht mehr. Das ist doch eigentlich ganz simpel. Ich will nur unter einer ganz bestimmten Bedingung die Anwendung schließen. Daz uhabe ich folgendes getan:

ein Property FUserClose : Boolean; definiert, welches ich wie folgt im OnClose berücksichtige
Delphi-Quellcode:
procedure TServerSocketForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  If FUserClose then
    Action := cafree
  else
    Action := caHide;
end;
Ich habe überprüft, dass FUserClose zu diesem Zeitpunkt False ist und für Action caHide zugewiesen wird. Trotzdem wird meine Anwendung geschlossen.

wo ist mein Denkfehler?

Gruß oki
  Mit Zitat antworten Zitat
hoika

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

Re: Problem mit caHide im OnClose der Form

  Alt 8. Feb 2007, 17:24
Hallo,

FormCloseQuery ist die richtige Stelle.


Heiko
Heiko
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Problem mit caHide im OnClose der Form

  Alt 8. Feb 2007, 20:55
Hi Hoika,

ok, das ist sicher auch eine gute Stelle. Ich möchte aber ein Hide haben. Wenn man mir das im OnClose Ereignis auch noch so aufdrängelt, dann will ich auch dass es geht.

Zitat:
Das Ereignis OnClose wird beim Schließen des Formulars ausgelöst.

type
TCloseAction = (caNone, caHide, caFree, caMinimize);

TCloseEvent = procedure(Sender: TObject; var Action: TCloseAction) of object;

property OnClose: TCloseEvent;

Beschreibung

Mit OnClose können Sie spezielle Verarbeitungen durchführen, wenn das Formular geschlossen wird. Sie können in der zugehörigen Ereignisbehandlungsroutine beispielsweise prüfen, ob in allen Feldern eines Dateneingabeformulars gültige Eingaben vorgenommen wurden.

Ein Formular wird geschlossen, nachdem die Methode Close aufgerufen oder im Systemmenü die Option Schließen gewählt wurde.

Der Typ TCloseEvent zeigt auf eine Methode, die für das Schließen des Formulars zuständig ist. Der Parameter Action bestimmt, ob das Formular tatsächlich geschlossen wird. Er kann die folgenden Werte annehmen:

Wert Bedeutung

caNone Das Formular darf nicht geschlossen werden, daher geschieht nichts.
caHide Das Formular wird nicht geschlossen, sondern lediglich verborgen. Die Anwendung kann nach wie vor auf das Formular zugreifen.
caFree Das Formular wird geschlossen und sein Speicher freigegeben.
caMinimize Das Formular wird nicht geschlossen, sondern als Symbol angezeigt. Bei untergeordneten MDI-Formularen ist dies die Standardeinstellung.
Ich denke, dass das allgemein für Formulare, jedoch nicht für Hauptformulare gilt. Da muß dann ja eine Hide wie ein Close wirken. So nach dem Motto, ein Hauptfenster kann nicht verborgen, sondern nur minimiert werden.

Gruß oki
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Problem mit caHide im OnClose der Form

  Alt 8. Feb 2007, 21:30
Hi,

OnCloseAction IST die richtige Stelle:

Delphi-Quellcode:
procedure TForm1.OnCloseQuery(Sender:TObject; CanClose:boolean);
begin
  CanClose := FUserClose;
  if NOT CanClose then
    Hide;
end;
Und du bekommst auch dein Hide

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Problem mit caHide im OnClose der Form

  Alt 8. Feb 2007, 22:06
Hi Jungs!

Ich will wirklich nicht streiten. Ich gebe euch auch recht mit euren Bemerkungen zur Nutzung des Ereignisses OnCloseQuery. Aber warum gibt es den var-Parameter Action wenn man ihn nicht nutzen soll? Das versteh ich nicht.

Gruß oki
  Mit Zitat antworten Zitat
hoika

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

Re: Problem mit caHide im OnClose der Form

  Alt 9. Feb 2007, 09:08
Hallo,

in MDI-Client-Fenster kannst du damit steuern,
ob das Client-Fenster geschlossen oder nur versteckt wird.


Heiko
Heiko
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Problem mit caHide im OnClose der Form

  Alt 9. Feb 2007, 15:29
Hi hoika,

also kann ich OnClose nutzen, muß jedoch nur beachten, dass caHide zum schließen des anwendung führt.

gruß oki

PS: Sieht bei mir jetzt ein bischen nach Rechthaberei aus. Ist aber nicht so gemeint.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Problem mit caHide im OnClose der Form

  Alt 9. Feb 2007, 16:22
Ich bin wie oki der Meinung das man das auch im OnClose machen kann denn dafür ist es ja da (und bietet mehr möglichkeiten als das onCloseQuery).
Wenn man mit dem Debugger mal dort ansetzt ist Action per Default "caHide" beim schließen der Form per X in der rechten oberen Ecke. Beim Mainform entspricht caHide dem schließen des gesamten, bei anderen Forms nicht. Es ist also nicht wie man annimmt das beim Standardform per Default die Action caFree ist sondern sie ist caHide und somit hat das ganze keinen Sinn was im Ausgangspost steht weil dadurch keine Änderung eintritt.
Beim Mainform ist die einzige Möglichkeit im OnClose, Action auf caNone zu setzen und manuell das Hide des Forms aufzurufen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Problem mit caHide im OnClose der Form

  Alt 9. Feb 2007, 21:10
Joop, das ist auch meine Erkenntnis. Ich hatte mich nur vom caHide verwirren lassen, da ich nicht wußte, dass bei MainForms so die Anwendung geschlossen wird.

Der Ansatz war eigentlich, dass ich das versehentliche Schließen der Anwendung über den Close-Button rechts oben im Systemmenü verhindern will. Die Anwendung soll dann nur noch über ein TrayIcon in der Taskbar aktiv bleiben. Das hab ich jetzt auch im OnClose belassen, nur nicht mit caHide sondern caFree und eine Zeile mehr . Ich hab das sicher auch nicht als ein großes Problem gesehen, sondern mich nur gewundert. Es scheint aber auch so zu sein, dass die Masse lieber mit OnCloseQuery arbeitet.

Herzlichen Dank noch mal für die Antworten

Gruß oki
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:47 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