Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Programm unterbrechen (und weiterlaufen lassen) (https://www.delphipraxis.net/102628-programm-unterbrechen-und-weiterlaufen-lassen.html)

KPBecker 1. Nov 2007 10:55


Programm unterbrechen (und weiterlaufen lassen)
 
Hallo, Delphi-Praktiker,

die Abarbeitung einer Schleife soll angehalten werden können (um in einem Memo etwas anzuzeigen) und dann auf ButtonClick wieder weiterlaufen.
Mit Application.MessageBox z.B. kann man eine solche Unterbrechung erreichen.

Frage:
Geht das (anhalten / Memo anzeigen / BottonClick / an der Stelle weiterlaufen) auch über einen einzelnen Button (ohne MessageBox). (Das Programm soll nicht abgebrochen werden.)

Beste Grüße
Klaus-Peter

Dax 1. Nov 2007 10:59

Re: Programm unterbrechen (und weiterlaufen lassen)
 
Nicht sehr schön, nein. Aber was ginge wäre folgendes:
Delphi-Quellcode:
while nicht fertig do
begin
  if act then
    // deine sachen
  act := false; //schleife unterbrechen
  Delay(0); // aus der Codelib
end;
In einem anderen Button setzt du act auf True und schon läuft die Schleife wieder. Allerdings ist für sowas ein Thread ideal, den man einfach mit .Suspend schlagen legen und mit .Resume wieder wecken kann.

Deep-Sea 1. Nov 2007 11:00

Re: Programm unterbrechen (und weiterlaufen lassen)
 
Es geht schon, unter Zuhilfenahme von Application.ProcessMessage uä.
Aber das wird nicht sehr schön werden.
Könnte man dein Problem vlt. anders und besser lösen? Was willst du damit erreichen?

KPBecker 1. Nov 2007 11:07

Re: Programm unterbrechen (und weiterlaufen lassen)
 
Hallo, Dax:
Die Schleife "nichtFertig" läuft ja ständig durch. Wie ist das mit der belegten Rechenzeit ?

Hallo, Deep-Sea:
Eine Datei wird in einer Schleife satzweise gelesen, der verarbeitete Satz soll im Memo angezeigt werden (Zuweisung ans Memo und Application.ProcessMessages), dann muß Zeit zum Lesen bleiben. Danach soll der Knopf gedrückt und der nächste Satz gelesen werden (= die Schleife soll weiterlaufen).

Klaus-Peter

Dax 1. Nov 2007 11:11

Re: Programm unterbrechen (und weiterlaufen lassen)
 
Zitat:

Zitat von KPBecker
Hallo, Dax:
Die Schleife "nichtFertig" läuft ja ständig durch. Wie ist das mit der belegten Rechenzeit ?

Ja, anders geht es ja nicht. Wenn du aber Delay benutzt wie angegeben, wird fast nichts an Rechenzeit belegt.

RavenIV 1. Nov 2007 12:05

Re: Programm unterbrechen (und weiterlaufen lassen)
 
Zitat:

Zitat von KPBecker
Hallo, Dax:
Die Schleife "nichtFertig" läuft ja ständig durch. Wie ist das mit der belegten Rechenzeit ?

Hallo, Deep-Sea:
Eine Datei wird in einer Schleife satzweise gelesen, der verarbeitete Satz soll im Memo angezeigt werden (Zuweisung ans Memo und Application.ProcessMessages), dann muß Zeit zum Lesen bleiben. Danach soll der Knopf gedrückt und der nächste Satz gelesen werden (= die Schleife soll weiterlaufen).

Klaus-Peter

Würde ich ganz anderst machen.
Funktion und Darstellung trennen.

Ein Button1 mit Text "Datei einlesen".
Hier im OnClick wird die erste Zeile gelesen, im Memo angezeigt und in einer Variablen die Zeilennummer gemerkt.

Dann einen Button "nächste Zeile lesen".
In diesem OnClick wird jeweils eine weitere Zeile gelesen und im Memo angezeigt.
Auch hier merkt man sich die Zeilennummer.
Wenn die Datei zu Ende gelesen ist, wird der Button "nächste Zeile" deaktiviert.

Deep-Sea 1. Nov 2007 12:09

Re: Programm unterbrechen (und weiterlaufen lassen)
 
Zitat:

Zitat von KPBecker
Eine Datei wird in einer Schleife satzweise gelesen, der verarbeitete Satz soll im Memo angezeigt werden (Zuweisung ans Memo und Application.ProcessMessages), dann muß Zeit zum Lesen bleiben. Danach soll der Knopf gedrückt und der nächste Satz gelesen werden (= die Schleife soll weiterlaufen).

Ya dann mach es doch anders: Weise einer Variable, zB. hier mal "Zeilennummer" genannt, die Nummer der ersten Zeile zu. Beim Klick auf den Button liest diese Zeile ein und inkrementierst die Zeilennummer, usw. bis du am Ende bist ...
Sprich: Vergiss die Schleife ^^

(Mist, zu langsam =P ^^)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.

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