Autor Beitrag
LingNeu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

XP Pro
Delphi 7 Enterprise
BeitragVerfasst: Fr 13.02.09 16:30 
Hallo Delphifreunde,
habe folgende Konstruktion, mit einer Prozessbar. Gibt es hier ein Möglichkeit z.B. über einen Abbruch-Button diese Schleife zu stoppen?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
dauer := 5;
pause := 5;

for inter := 1 to 100 do begin
     for pos:= 1 to (dauer*10) do begin
        ProcessBar.Position := pos;
        sleep(100);
    end;
    sleep(1000*dauer);
end;


Vielen Dank für jeden Hinweis schon mal vorab
LingNeu
DerNetteNachbar
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Fr 13.02.09 16:32 
Jop, mit einem break
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Fr 13.02.09 16:34 
Du könntest wie DerNetteNachbar sagte beliebig breaks einbauen, allerdings sagt mein Info Lehrer immer, das wäre schlechter Stil.

Man solle sich vorher Gedanken machen was die Abbruchsbedingungen sind.

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
gispos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94

WIN 7
XE10, D2007
BeitragVerfasst: Fr 13.02.09 16:50 
Und ein Application.ProzessMessages sollte da auch nicht fehlen, sonst zeigt der Abbruch Button erst mal keine Reaktion.
Um nicht bei jedem Schleifendurchgang die Message aufzurufen z.B. nur bei jedem 10.
ausblenden Delphi-Quelltext
1:
If i div 10 = 0 then Application.ProcessMessages;					


Gruß gispos
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 13.02.09 16:51 
user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
allerdings sagt mein Info Lehrer immer, das wäre schlechter Stil.

Man solle sich vorher Gedanken machen was die Abbruchsbedingungen sind.
Das stimmt zwar schon, aber:
Wenn ich eine for-Schleife benutze, weil die Schleife normalerweise eine fest definierte Anzahl von Durchläufen machen soll und mit break im Ausnahmefall herausspringe, ist das schon richtig.

Wenn ich aber weiß, dass eine Schleife normalerweise nur bis zu einem bestimmten Wert und nicht eine feste Anzahl Durchläufe laufen soll, dann ist z.B. eine while-Schleife vermutlich die bessere Alternative.

Im genannten Fall ist der Abbruch die Ausnahme, deshalb finde ich break schon passend.

Sleep würde ich allerdings nicht verwenden, weil das das Drücken des Abbrechen-Buttons unmöglich macht. Besser wäre dieses Delay:
www.delphipraxis.net/topic7355.html
LingNeu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

XP Pro
Delphi 7 Enterprise
BeitragVerfasst: Fr 13.02.09 17:15 
Hallo Delphifans,
vielen Dank für Euere Hilfe. Mit nachfolgendem Code konnte ich das verwirklichen, was ich benötige. Bin zwar noch am Testen, denke aber, dass es so passt. Das mit der Delay-Funktion statt dem sleep() finde ich genial!! Danke!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
dauer := 5;
pause := 5;
inter := 1;
i     := 5;
chk_break.checked := false; //Über Checkbox stoppen
while (inter<i) and (not chk_break.Checked) do begin
        for pos:= 1 to (dauer*10) do
        begin
        ProcessBar.Position := pos;
        delay(100);
        end;
        If pos div 10 = 0 then Application.ProcessMessages;
    delay(1000*dauer);
end;

Schöne Grüsse
LingNeu
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 13.02.09 17:21 
Du veränderst weder inter noch i, d.h. deine Schleife kann nur über die CheckBox abgebrochen werden und läuft sonst bis zum Sankt Nimmerleinstag weiter. ;-)

Du kannst auch einen normalen Button benutzen. Vor der Schleife kannst du dessen Tag-Eigenschaft auf 1 setzen, beim Abbrechen auf 0. Dann kannst du einfach die Schleife laufen lassen solange ButtonX.Tag > 0 ist.
LingNeu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

XP Pro
Delphi 7 Enterprise
BeitragVerfasst: Fr 13.02.09 17:31 
@jaenicke
danke für den Hinweis.
Habe beim Kopieren
INC(inter) vergessen
Das mit dem Button werde ich auch noch probieren. Merci!

ciao
LingNeu