![]() |
prozedur beenden
Hey Leute wie kann ich in einer von einer Prozedur aus eine andere während diese läuft beenden?
Der code sieht vereinfacht so aus so aus:
Delphi-Quellcode:
Es handelt sich, wie unschwer zu erkennen, um das Bild eines Autos das fahren soll.
procedure TForm1.B_StartClick(Sender: TObject);
begin while (Auto.Left >= -100) do begin Auto.Left:=Auto.Left-1; end; end; Ich will jetzt einen Stop Button hinzufügen, dabei dachte ich mir unterbreche ich am besten die prozedur. Ich dachte da an sowas
Delphi-Quellcode:
oder so ähnlich
procedure TForm1.B_StopClick(Sender: TObject);
begin exit procedure TForm1.B_StartClick end; Ich will nur sichergehen dass ich mich klar ausdrücke, deshalb wiederhole ich mich wahrscheinlich auch ein paar mal ^^. Ich will also von der 2. Prozedur aus die 1. beenden geht das überhaupt, bin nämlich im Internet auf nichts darüber gestoßen? |
Re: prozedur beenden
Das geht so direkt leider nicht. Du hast im Grunde folgende Möglichkeiten:
1. Du nimmst eine Boolean-Variable, die du in deiner While-Schleife regelmäßig abfragst 2. Du nimmst einen Thread 3. Du entfernst die Schleife und verlagerst stattdessen den Code in einen Timer. |
Re: prozedur beenden
4. Ein Application.ProcessMessages in der Schleife.
|
Re: prozedur beenden
Zitat:
|
Re: prozedur beenden
Jupp.
|
Re: prozedur beenden
Danke für den Tipp mit dem Application.ProcessMesseges aber die hatte ich schon drin und hab sie der Einfachkeit halber weggelassen ^^
@ Zitat:
Möglichkeit 3 kann ich auch nachvollziehen, aber is mir ein kleines bisschen zu viel arbeit, da ich diese aktion mehrere Male wiederholen müsste Da ich aber ncoh ein ziemlicher Delphi Noob bin: Was ist ein Thread in Delpi? Falls es zu umfangreich ist dann sag einfach mal kurz in 1,2 Sätzen, damit ich mir was darunter vorstellen kann. |
Re: prozedur beenden
Also... weil du dich mit einer knappen Erklärung zufrieden gibst:
Alles was du auf deiner Form und in dem Code da machst wird im Prozess deines Programmes ausgeführt. Dabei kann immer nur eine Anweisung "gleichzeitig" ausgeführt werden (im Prinzip ist dein Programm ein Thread). Das ist auch der Grund, warum du das Application.ProcessMessages brauchst - solange in der Schleife gearbeitet wird, kommt der Button nicht zum Zuge, weil das Programm ja beschäftigt ist. Ein Thread kann dabei helfen, weil er, wie ein zweites Programm "gleichzeitig" läuft. Dann würdest du die Schleife vielleicht in den Thread packen, der Button kann immer auf Klicks reagieren und ein Klick würde zum Beispiel den Thread töten, wobei dann die Schleife auch nicht mehr laufen würde. Allerdings gibt es beim Thema Threads viele Fallstricke, zum Beispiel darf der Thread nicht direkt auf deine Form und alles was sich da drin befindet zugreifen, der Zugriff auf gemeinsame Daten (Variablen) muss abgesichert werden... also für deinen Anwendungsfall vermutlich nicht unbedingt erforderlich. Dazu gibts auch sehr viel im Internet zu finden - ich meine Luckie hatte da ein sehr schönes Tutorial auf seiner Seite...? HTH |
Re: prozedur beenden
Zitat:
Daher sollte man auch beim Thread eine Variable einführen, die in einer Schleife abgefragt wird (wie in einer normalen Prozedur auch). Das ist dann vergleichbar damit, ein Programm normal zu beenden anstatt mit Ctrl-Alt-Del. Gruss Reinhard |
Re: prozedur beenden
Danke für die Erklärungen über Threads erstmal. Ich hab es inzwischen wie von NamenLozer beschrieben mit der Boolean Variable gemacht ... merkwürdig ich programmiere schon seit mehreren Jahren in zahlreichen anderen Programmiersprachen und bin doch nicht selbst auf sowas simples gekommen :wink:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 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-2025 by Thomas Breitkreuz