AGB  ·  Datenschutz  ·  Impressum  







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

TForm.Close

Ein Thema von jonny · begonnen am 8. Jan 2004 · letzter Beitrag vom 8. Jan 2004
Antwort Antwort
Seite 2 von 2     12   
galex

Registriert seit: 8. Jan 2004
4 Beiträge
 
#11

Re: TForm.Close

  Alt 8. Jan 2004, 10:30
Zitat:
Hide macht das Formular nur unsichtbar, schließt es baer nicht, dies tut nur, wie der Name auch schon sagt, Close();.
Richtig! Und was will man genau mit Close(); erreichen?
Ich denke die Frage muß genau definiert werden.


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

Delphi-Syntax:

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. Das Ereignis OnClose legt fest, welche Ereignisbehandlungsroutine beim Schließen eines Formulars aufgerufen werden soll. 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:

Code 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.

Enthält bei einem untergeordneten MDI-Formular die Eigenschaft BorderIcons den Wert biMinimize, wird caMinimize als Standardaktion verwendet. Ist diese Eigenschaft nicht gesetzt, erhält Action den Standardwert caNone, und beim Schließen des Formulars werden keine speziellen Verarbeitungen durchgeführt.

Bei einem untergeordneten SDI-Formular wird Action der Standardwert caHide zugewiesen.

Um das Formular in einer Ereignisbehandlungsroutine für OnClose zu schließen und freizugeben, setzen Sie Action auf caFree.

Hinweis: Beim Beenden der Anwendung tritt das Ereignis OnClose nur im Hauptformular, aber nicht in den untergeordneten Formularen auf.
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#12

Re: TForm.Close

  Alt 8. Jan 2004, 10:40
Also ich mache es so:

Delphi-Quellcode:
  // About-Fenster erzeugen, anzeigen und wieder freigeben
  Application.CreateForm(TAboutBox, AboutBox);
  AboutBox.ShowModal;
  AboutBox.Free;
Geschlossen wird das Form mit Close()
und gab noch keine Probleme bisher.
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: TForm.Close

  Alt 8. Jan 2004, 10:53
Wenn du deinen Code von oben auf jedenfall weiterbenutzen willst, versuch doch einfach mal deine Variable vor dem neuen Create auf nil zu setzen.
Ich hatte in älteren Programmen auch öfter das problem, dass die Form zwar geschlossen war, das Objekt jedoch nicht nil war.

Code:
procedure TForm1.irgendwasClick(Sender: TObject);
var TfSU: TfrmSendURL;
begin
  If Application.FindComponent('SUForm') = Nil Then
  begin
    [color=red]TfSU := nil;[/color]
    Application.CreateForm(TfrmSendURL, TfSU);
    TfSU.Name:='SUForm';
    TfSU.lblUserName.Caption := 'Hahaha';
  end
  else
  begin
    (Application.FindComponent('SUForm') As TfrmSendURL).SetFocus;
  end;
end;
Allerdings halte ich diese Art der Schliessen/Neuöffnen Lösung mittlerweile auch für etwas ungeschickt.
Und ich kenn Application.FindComponent nicht so genau, also weiss ich auch nicht, ob du wirklich in deinen IF-Block kommst oder nicht. Bin zu faul es auszuprobieren )

mfg smk
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#14

Re: TForm.Close

  Alt 8. Jan 2004, 11:27
siehe OH
Zitat:
Die Methode Release entfernt das Formular und gibt den von ihm belegten Speicher frei.

Delphi-Syntax:

procedure Release;

C++ Syntax:

void __fastcall Release(void);

Beschreibung

Mit Release können Sie das Formular aus dem Speicher entfernen.

Release gibt das Formular erst frei, nachdem die Ausführung der Ereignisbehandlungsroutinen des Formulars und seiner untergeordneten Komponenten beendet ist. Die Methode stellt auch sicher, daß alle Botschaften in der Ereigniswarteschlange des Formulars vor dessen Freigabe bearbeitet werden. Jede Ereignisbehandlungsroutine für das Formular oder für dessen untergeordnete Objekte sollte Release anstelle von Free (Delphi) oder Delete (C++) benutzen. Ansonsten kann ein Speicherzugriffsfehler auftreten.

Hinweis: Release gibt die Steuerung sofort an die aufrufende Routine zurück und wartet nicht, bis das Formular freigegeben wird.
Außerdem solltest du noch darauf achten, daß eventuelle Zeiger auf die Form auf nil gesetzt werden, also z.B. Form1:=nil

Grüsse
Woki
  Mit Zitat antworten Zitat
jonny

Registriert seit: 15. Dez 2003
235 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: TForm.Close

  Alt 8. Jan 2004, 17:32
Mit Free habe ich auch getestet es gab einen Speicherzugriffsfehler werde es jetzt noch mal mit Release testen aber danke schon mal werde mich dann melden.
  Mit Zitat antworten Zitat
jonny

Registriert seit: 15. Dez 2003
235 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: TForm.Close

  Alt 8. Jan 2004, 17:49
OK Wollte nur mal melden wenn man im OnClose Ereigniss Self.Release; reinstellt dann funktioniert das wunderbar keine Fehler mehr und wird auch alleas gut und mehrmals erstellt.

Danke für die Hilfe!!!!!!!!!!!!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 03:16 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