![]() |
AW: Pausenfunktion
Zitat:
Delphi-Quellcode:
oder
Sleep(MaxInt);
Delphi-Quellcode:
oder auch
while true do;
Delphi-Quellcode:
. Damit hängst du nämlich dein Programm für eine recht lange Zeitspanne auf.
repeat until false;
Du willst aber wohl nicht alles anhalten, sondern nur etwas bestimmtes. Was das genau ist, weißt aber nur du. Also musst du es auch selbst programmieren. |
AW: Pausenfunktion
Zitat:
@OrakelvonDelphi: Nehmen wir mal an, du hast eine lange dauernde Methode, sagen wir mal für das Einlesen einer großen Liste von Dateien in irgendwelche Records oder Datenbank-Tabellen. Diese Liste klapperst du normalerweise mit einer For-To-Schleife ab:
Delphi-Quellcode:
(LeseDatei ist deine Methode, um die Datei im übergebenen String einzulesen.)
for i := 0 to z-1 do LeseDatei(Liste[i]);
Nun möchtest du, weil du nebenher was anderes am selben PC machen willst, eine Pausenfunktion für diese Einlese-Methode einrichten. Du setzt einen Button aufs Formular, den du z.B. Btn_PauseWeiter nennst. Nun genügen die Möglichkeiten der For-To-Schleife nicht mehr, du benötigst eine While-Schleife:
Delphi-Quellcode:
Klickst du nun auf den Button "Pause", schaut dessen Klick-Methode nach, wie die Variable Pause gerade steht und reagiert entsprechend. Deine Einlese-Schleife fragt ebenfalls die Pause-Variable ab und reagiet entsprechend.
...
private Var Pause : Boolean; LeseId : Integer; procedure Einlesen(const Liste : TStrings); implementation procedure TForm1.Einlesen(const Liste : TStrings); var i,z : Integer; begin if not Assigned(Liste) then exit; z := Liste.Count; if z = 0 then exit; i := LeseId; LeseId := 1; Pause := false; Btn_PauseWeiter.Caption := 'Pause'; while (i < z) and not Pause do begin LeseDatei(Liste[i]); inc(i); Application.ProcessMessages; end; // wenn durch Pause abgebrochen, dann aktuelle Position der Liste merken if Pause then LeseId := i else // sonst alles wieder zurücksetzen begin Btn_PauseWeiter.Caption := 'Einlesen'; LeseId := 0; end; end; procedure TForm1.Btn_PauseWeiterClick(Sender: TObject); begin If LeseId = 0 then Einlesen else begin if Pause then begin Btn_PauseWeiter.Caption := 'Pause'; Pause := false; end else begin Btn_PauseWeiter.Caption := 'Weiter'; Pause := true; end; end; end; |
AW: Pausenfunktion
Zitat:
|
AW: Pausenfunktion
Was bisher geschrieben wurde....
Naja! |
AW: Pausenfunktion
@hathor
Und das nimmt der TE jetzt einfach und kann damit das in seiner Anwendung pausieren, was er pausieren möchte? Der TE will ein Spiel programmieren. Dort wird während des Spiels Musik abgespielt, evtl. Zeiten gemessen (nach wieviel Sekunden wurde Button x gedrückt), etc. etc. ... Die "Pause" bezieht sich hier auf einen bestimmten Kontext und dieser Kontext soll pausieren. Somit ist jeder generelle Ansatz komplett falsch, weil der Kontext gar nicht berücksichtigt werden kann. |
AW: Pausenfunktion
Zitat:
Ein aus der Luft gegriffenes Beispiel mit Thread trifft es viel besser... |
AW: Pausenfunktion
Es gibt ja einen "Zauberbefehl", mit dem man alles in der VCL anhalten kann .... aber dann steht alles, wirklich alles, und man kann mit dem Programm nix mehr anfangen.
|
AW: Pausenfunktion
|
AW: Pausenfunktion
Zitat:
Das revolutioniert unsere Arbeit grundlegend, endlich keine unnötigen Gedanken mehr über das was erreicht werden soll, und mögliche Seiteneffekte, einfach "mach ma!". Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz