Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Form1 will nicht schließen


V!P3R - So 25.11.07 16:07
Titel: Form1 will nicht schließen
das programm lässt sich nur noch über den Taskmanager beenden


gibt es noch ne andere möglichkit auser:


Delphi-Quelltext
1:
Form1.Close;                    

oder


Delphi-Quelltext
1:
Form1.Destroy;                    

oder


Delphi-Quelltext
1:
Form1.CloseQuery;                    


bitte helft. das prog an sich ist gut geworden, nur wenn mans nicht schließen kann...

EDIT: Ich habe bei Form1 bei Ereignisse OnCloseQuery benutzt, aber jez kann mans GAR nicht mehr schließen.

MfG


Herr Bananerama - So 25.11.07 16:27

Hi,

Destroy ist nicht zum schließen geeignet sonder ist der Destruktor der Form.

Zitat:
CloseQuery wird automatisch aufgerufen, wenn versucht wird, das Formular zu schließen. CloseQuery gibt true zurück, wenn das Formular geschlossen werden kann. Andernfalls wird das Formular durch Rückgabe von false am Schließen gehindert. {Delphi Hilfe!!!)

-> ist also auch nicht geeignet

Close weiß ich nicht was macht aber ist aufjedenfall auch nicht geeignet^^

Du kannst aber aufjedenfall HALT benutzen

mfg Herr Bananerama


V!P3R - So 25.11.07 17:11

siehe http://www.delphi-forum.de/topic_wie+kann+man+klick+auf+X+mit+einer+aufgabe+verbinden_78539.html


Sinspin - So 25.11.07 17:14

Im Hauptfenster Close aufrufen ist normalerweise alles was du machen musst.

Eine nicht ganz so Tolle, aber immernoch verwendbare Lösung ist Application.Terminate.

Wenn du was für den Ereignisshandler von OnCloseQuery geschrieben hast solltest du das erstmal auskommentieren.


Gausi - So 25.11.07 17:24

user profile iconHerr Bananerama hat folgendes geschrieben:

Close weiß ich nicht was macht aber ist aufjedenfall auch nicht geeignet^^

Du kannst aber aufjedenfall HALT benutzen
Was ist an Close auszusetzen? Soweit ich weiß, gar nichts. Und HALT ist ne genz tolle Sache. Wenn mein Auto anhalten soll, such ich mir auch ne schöner Mauer und fahr dagegen...

Ist die Form, die mit Close geschlossen werden soll, die Hauptform deiner Anwendung?


Popov - So 25.11.07 17:32

Close ist der übliche Weg um ein Programm oder Fenster zu schließen.

Ist das Fenster das Mainfenster, also das Hauptfenster der Applikation, dann wird bei Close auch das Programm beendet. Ist es ein normales Fenster, wird bei Close nur das Fenster geschlossen.

Es ist möglich das Mainfenster neu zuzuordnen.

Application.Terminate ist in etwa gleich mit Close des Hauptfensters. Hier wird auch der Speicher freigegeben.

Halt ist bei reinem Pascal ohne OOP eine Möglichkeit, aber nicht in einem Fenster.


alzaimar - So 25.11.07 17:50

user profile iconPopov hat folgendes geschrieben:
Es ist möglich das Mainfenster neu zuzuordnen.

Kannst Du mir zeigen, wie das (elegant) geht? Oder muss man Tricks anwenden?


Popov - So 25.11.07 18:33

Man muß etwas tricksen. Hab es bisher auch nur einmal gemacht. Geht aber.


jaenicke - So 25.11.07 18:43
Titel: Re: Form1 will nicht schließen
user profile iconV!P3R hat folgendes geschrieben:
EDIT: Ich habe bei Form1 bei Ereignisse OnCloseQuery benutzt, aber jez kann mans GAR nicht mehr schließen.
Kann es sein, dass du CanClose auf false setzt dort? Weil dann lässt sich das Fenster natürlich nicht schließen. Und wenn es das Hauptfenster ist, eben auch die Anwendung nicht.
Um diese zu schließen kann man zwar auch Application.Terminate benutzen, wenn man das Hauptfenster nicht direkt ansprechen möchte, aber wenn das Hauptfenster mit CanClose in OnCloseQuery unschließbar ist, nutzt das alles nix.

user profile iconPopov hat folgendes geschrieben:
Man muß etwas tricksen. Hab es bisher auch nur einmal gemacht. Geht aber.
Tricksen? Das kannst du in den Projektoptionen festlegen.


Popov - So 25.11.07 18:54
Titel: Re: Form1 will nicht schließen
user profile iconjaenicke hat folgendes geschrieben:
user profile iconPopov hat folgendes geschrieben:
Man muß etwas tricksen. Hab es bisher auch nur einmal gemacht. Geht aber.
Tricksen? Das kannst du in den Projektoptionen festlegen.


Ich nehme an er will wissen wie es zur Laufzeit geht.


alzaimar - So 25.11.07 20:25
Titel: Re: Form1 will nicht schließen
user profile iconPopov hat folgendes geschrieben:
Ich nehme an er will wissen wie es zur Laufzeit geht.

Stimmt, das will er, aber egal.


jaenicke - Mo 26.11.07 10:11

Na gut, das geht allerdings auch recht einfach:

Delphi-Quelltext
1:
Pointer((@Application.MainForm)^) := Form2;                    
Schließt du nach dieser Zeile die zweite Form, wird die ganze Anwendung geschlossen. Das basiert darauf, dass MainForm zwar eine ReadOnly Eigenschaft ist, dabei aber direkt auf die dahinterliegende Variable zugreift und keine Getter-Methode benutzt.

Allerdings ist das Anwendungskonzept IMHO (vorsichtig ausgedrückt) nicht sinnvoll, wenn man das Hauptfenster zur Laufzeit ändern muss. Aber funktionieren tut es, auch wenn saubere Programmierung etwas anderes ist. (Wie gesagt, das ist meine persönliche Meinung.)


alzaimar - Mo 26.11.07 10:15

:shock: Aua. Gut, was dazugelernt, ich werde es aber nicht anwenden.


V!P3R - Fr 30.11.07 18:00
Titel: RE
dieser Thred wird immer größer und größer, aber ich habe ne weie rumprobiert, und ich kann nur folgendes empfehlen:
wenn ihr auf den [X] klick im Frm1 klickt, soll sich das programm nicht sofort beenden. also macht ihr folgendes:


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=False;
Form2.Show;
end;

Form2 ist das zweite formular, indem zum beispiel stehen kann: " wollen sie das dokument speicher? "
Klick auf 'nein'


Delphi-Quelltext
1:
2:
3:
4:
procedure TEnde.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;

klick auf ja...und weiter gehts.

vielen dank für die hilfe.

MfG


Marc. - Fr 30.11.07 18:42

Da finde ich diese Lösung deutlich eleganter: :P

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  canclose := (MessageDlg('Wollen Sie das Programm wirklich beenden ?',mtConfirmation, [mbYes, mbNo], 0) = mrYes);
end;


Grüße
Marc


V!P3R - Fr 30.11.07 19:02

Ansichts - und Geschmackssache


Timosch - Fr 30.11.07 20:25

user profile iconV!P3R hat folgendes geschrieben:
Ansichts - und Geschmackssache

Ähm, mit Marcs Methode brauchst du das gesamte zweite Formular nicht...
Aber das hatten wir doch schonmal irgendwo in einem Thread heute, oder?


V!P3R - Sa 01.12.07 13:54

könnte mal bitte einer diesen Thred schließen,
DIE FRAGE IST DOCH SCHON LÄNGST BEANTWORTET


Marc. - Sa 01.12.07 13:56

user profile iconV!P3R hat folgendes geschrieben:
könnte mal bitte einer diesen Thred schließen,
DIE FRAGE IST DOCH SCHON LÄNGST BEANTWORTET

Mäßige bitte deinen Tonfall! :mahn:
Was spricht denn dagegen, über alternative Lösungsvorschläge weiter zu diskutieren?

cu
Marc


Atreyu - Sa 01.12.07 14:05

Davon abgesehen, dass Marcs Lösung tatsächlich wesentlich eleganter ist...


elundril - Sa 01.12.07 14:10

user profile iconV!P3R hat folgendes geschrieben:
Ansichts - und Geschmackssache


das ist dann der unterschied zwischen Windows und Linux. ;-)

lg elundril


V!P3R - Sa 01.12.07 14:30

okay, von mir aus könnt ihr den größten thread der welt planen, um genau zu sein hab ich jez auch den anderen vorschlag angenommen.

aber macht weiter bis weihnachten 2020 von mir aus


MFG


Timosch - Sa 01.12.07 16:31

Nochmals: Es ist keine "Geschmackssache". Im Vorschlag mit MessageDlg braucht man nur ein Formular, was Zeit spart. Aber dazu ist denke ich alles gesagt. Übrigens finde ich diese Doppelposts in zwei Threads sehr amüsant... (http://www.delphi-forum.de/viewtopic.php?t=78539&highlight=).


V!P3R - Sa 01.12.07 16:39

ich auch, deshalb bitte ich ja auch darum beide zu schließen, oder wenigstens eins...!!!


Blackheart666 - So 02.12.07 00:03

user profile iconV!P3R hat folgendes geschrieben:
ich auch, deshalb bitte ich ja auch darum beide zu schließen, oder wenigstens eins...!!!

Ich hab jetzt nur das eine Zitat gewählt, Du scheinst nicht zu begreifen worum es hier im Forum geht.
So eine Frechheit ist Mir hier im Forum nur ganz selten untergekommen.


V!P3R - So 02.12.07 10:56

ich habe meine fragen, und ich bekomme die richtigen antworten, und ich bin froh wenn jemand mein problem beachtet, und versucht mir zu helfen, mehr will ich eigentlich gar nicht.


EDIT: da ich erst in der 9 bin, und vor nem viertel jahr mit delphi überhaupt angefangen habe, kann ich leider noch nicht soviele fragen beantworten, trotztdem versuche ich es.
>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||<
>ich denke nur an mich?? und was ist damit?<



EDIT2: wann habe ich einem Mod etwas vorgeschrieben, ich bin ein normaler User, nur admin und co-admin können den mods etwas vorschrieben(also ich weis nich genau wie das hier läuft, is auch nicht so wichtig) will nur sagen, das ich die mods gebeten habe, da ich mehrere anschuldigungen anhören musste, aber ich wollte weder den mods, noch den anderen usern etwas vorschreiben.


MfG


jasocul - Mo 03.12.07 09:41

user profile iconV!P3R hat folgendes geschrieben:
ich habe meine fragen, und ich bekomme die richtigen antworten, und ich bin froh wenn jemand mein problem beachtet, und versucht mir zu helfen, mehr will ich eigentlich gar nicht.
Es geht in einem Forum nicht nur darum, was Du willst.
Alternative Lösungen sind immer eine gute Möglichkeit, seinen Code zu optimieren. Daher werden Threads nach einer brauchbaren Antwort nicht einfach geschlossen.
Wenn ein Thread für Dich ausreichend beantwortet ist, dann kannst Du ihn entsprechend markieren. Wenn Dich alles weitere darin nicht interessiert, dann ignoriere es. Aber Du kannst hier niemanden (schon gar nicht den Moderatoren) vorschreiben, wann eine Thread geschlossen werden soll, bzw. keine Antworten mehr erwünscht sind.

Und nun wieder back to topic please.