Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   andwendung stoppen, nachricht anzeigen und danach erfolgreich schließen? (https://www.delphipraxis.net/160257-andwendung-stoppen-nachricht-anzeigen-und-danach-erfolgreich-schliessen.html)

Coxy 4. Mai 2011 19:03

Delphi-Version: 5

andwendung stoppen, nachricht anzeigen und danach erfolgreich schließen?
 
Hallo,
ich habe einen letzten Fehler:
Der script soll das Programm anhalten eine Nachricht anzeigen und nach ein paar Sekunden schließen.
Leider kommt die Nachricht, das Programm wird nicht angehalten und stürzt ab und wird nicht richtig geschlossen.
Aber wieso? Der Script ist ist doch so banal das er eigentlich stimmen müsste:

Delphi-Quellcode:
if Punkte > 100 then begin
  sleep(10000);
  showmessage('Sie haben gewonnen');
  application.Terminate;
  end

s.h.a.r.k 4. Mai 2011 19:13

AW: andwendung stoppen, nachricht anzeigen und danach erfolgreich schließen?
 
Hallo,

schreiben Delphianer Skripte? :gruebel: Wir schreiben eher Source Code. Des Weiteren müsste das Sleep erst nach dem ShowMessage platziert werden. Allerdings ist Sleep und ShowMessage blockierend. I.S.v. Sleep heißt das, dass die nächste Zeile erst dann fortgesetzt wird, wenn die entsprechende Zeit abgelaufen ist. In deinem Fall würde das bedeuten, dass ShowMessage erst nach einer Sekunde aufgerufen wird -> das willst du ja nicht. Bei ShowMessage wird die nächste Zeile (also das Application.Terminate) erst dann aufgerufen, wenn die Meldung quittiert wurde, d.h. wenn der User den OK-Button oder das X gedrückt hat. Daher ist beides schlecht...

Du könntest einen Timer nutzen, der dann entsprechend den Dialog schließt. Oder du nutzt einen Dialog, der sich selbst nach x Sekunden schließt.

Have a look...

Coxy 4. Mai 2011 19:39

AW: andwendung stoppen, nachricht anzeigen und danach erfolgreich schließen?
 
ehrlich gesagt schaffe ich es nicht den Beispiel Code in deinem Link zu verstehen.
Hättest du vielleicht ein anderes Beispiel?

-187- 4. Mai 2011 19:53

AW: andwendung stoppen, nachricht anzeigen und danach erfolgreich schließen?
 
Was genau verstehst du daran nicht?

Wir hatten hier vor 2-3 Tagen schonmal einen Timer Thread indem alles 100 mal erklärt wurde, vielleicht benutzt du einfach mal die Suche :)

alfold 4. Mai 2011 20:28

AW: andwendung stoppen, nachricht anzeigen und danach erfolgreich schließen?
 
Konzeptionell ist es eh schlecht.
Wenn ich gewonnen habe kann es ja sein, das ich noch mal spielen will.
Warum also gewaltsam das Programm beenden.
Lass es den User entscheiden ob er noch mal spielen will oder ob er das Programm beenden will.

Application.Terminate ist eh keine gute Lösung close reicht da vollkommen aus.

Gruss alfold

-187- 4. Mai 2011 21:02

AW: andwendung stoppen, nachricht anzeigen und danach erfolgreich schließen?
 
Ja ich halte das auch nicht für sinnvoll aber wer weiss schon worum es genau geht.

Also zurück zur Frage, hier ein Lösungsansatz:

Delphi-Quellcode:
if Punkte > 100 then begin
  Timer1.Interval:=10000;
  Timer1.enabled:=True;
  showmessage('Sie haben gewonnen');
  end
Im OnTimer Ereignis von Timer1 könnte dann Form1.Close; stehen ...

Coffeecoder 5. Mai 2011 07:00

AW: andwendung stoppen, nachricht anzeigen und danach erfolgreich schließen?
 
Hallo,

Ist nicht ein Ansatz so, dass es in der OnTimer-Methode nicht sofort die Form.close ausführt.
Das hieße doch, dass er bei 1. Sekunde das Form schliesst.

Mein Vorschlag in der TForm1.CanClose-Methode:

Delphi-Quellcode:

if Punkte > 100 then
begin
    showmessage('Sie haben gewonnen!');
    CanClose := true;
end;
Man musste nur an der entsprechende Stelle die Form1.CanClose-Methode aufrufen.

Mfg Coffeecoder

DeddyH 5. Mai 2011 07:08

AW: andwendung stoppen, nachricht anzeigen und danach erfolgreich schließen?
 
Und wenn man keine 100 Punkte erreicht hat, kann man das Programm nicht schließen?

[edit] Anderer Vorschlag:
Delphi-Quellcode:
if (Punkte > 100) and (Application.MessageBox('Sie haben gewonnen. Ein neues Spiel starten?', 'Glückwunsch', MB_YESNO) = idNo) then
  Close;
[/edit]

Coffeecoder 5. Mai 2011 07:12

AW: andwendung stoppen, nachricht anzeigen und danach erfolgreich schließen?
 
Das ist in meinem Code der Fall.

Hinzufügen, musste man noch eine Abfrage zb mit einem MessageDlg wenn man früher das Programm beenden mag.

DeddyH 5. Mai 2011 07:15

AW: andwendung stoppen, nachricht anzeigen und danach erfolgreich schließen?
 
Siehe mein Edit (dort ist es allerdings andersherum) ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr.
Seite 1 von 2  1 2      

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