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:
oder
oder
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
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
Herr 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
Popov 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
V!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.
Popov 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
jaenicke hat folgendes geschrieben: |
Popov 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
Popov 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
V!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
V!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
V!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
V!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
V!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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!