Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi hilfe!repeat-schleife mit abbruchfunktion (https://www.delphipraxis.net/54739-hilfe-repeat-schleife-mit-abbruchfunktion.html)

skreap 10. Okt 2005 19:41


hilfe!repeat-schleife mit abbruchfunktion
 
Hi Leute!
ich bin mitlerweile echt verzeweifelt.... warscheinlich bin ich einfach zu doof!!! :wall: :wall: :wall: !!!!
Follgendes Problem:

ich will ein kleines Program schreiben, dass eine Endlosschleife produziert die jedoch abbgerbochen werden soll wenn man button2 drückt... ich hatte schon fast ne lösung aber immer wenn ichs ausgeführt hab ist prozess bei 100% und es tut sich absolut nichts !
könnte mir jemand erklären wies geht mit der Schleife wenns geht ganz genau weil ich immernochnicht weiß obs jetzt:

Delphi-Quellcode:
repeat
     //net send 192.168.0.1 lala;
heißt oder
Delphi-Quellcode:
repeat
     ... net send 192.168.0.1 lala;


vielen dank im voraus ....
skreap

Achtzig 10. Okt 2005 19:50

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Vieleicht so:

Type
TForm1 = Class(TForm)
Private
FClicked :Boolean;
{...}
End;


Procedure TForm1.Button2Click(Sender:TObject);
Begin
FClicked:=True;
End;

Procedure TForm1.Schleifenfunktion;
Begin
Repeat
{ Irgendwas }
Application.ProcessMessages;
Until FClicked;
End;

PierreB 10. Okt 2005 19:51

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Ich weiß nicht welchen produktiven Sinn es haben sollen in einer Schleife beliebig oft Net Send Nachrichten zu verschicken !?!?

Generell müsste es so gehen:
Delphi-Quellcode:
var
test : Boolean;

//Jetzt die Schleife bei klick auf Button1
procedure form1.Button2click(Sender : TObject);
begin
repeat
 //Dein Net Send Zeug
until test = true;
end;

//Jetzt bei Klick auf Button2 wirds abgebrochen
procedure form1.Button2click(Sender : TObject);
begin
test := true;
end
Trotzdem weiß ich nicht welchen Sinn dein Programm haben soll. :gruebel:

//Edit: Kleine Veränderung

P.S.: Nicht getestet

geisi 10. Okt 2005 19:55

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Das kann so aber nicht funktionieren, wenn man in einer endlosschleife ist, kann kein button gedrückt werden. ich weiß zwar nicht wie es delphi funktioniert, aber in JAVA macht man das mit einem Thread.

skreap 10. Okt 2005 20:05

Re: hilfe!repeat-schleife mit abbruchfunktion
 
einen tieferen Sinn hat die Sache eigentlich auch nicht...will nur testen obs geht weil n Freund von mir behauptet hat dass er so zeugs übers inet bekommt und ich das schwer anzweifle!dann wollt ichs wissen obs geht aber ich komm mit der schleife nicht hin !keine Ahnung warum !


werd die Tips mal testen, danke
skreap

Neotracer64 10. Okt 2005 20:09

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Zitat:

wollt nur testen obs geht weil n Freund von mir behauptet hat dass er so zeugs übers inet bekommt und ich das schwer anzweifle!
Warum brauchste fürs Testen eine Schleife ? Und warum in Delphi ? Teste es doch über die Konsole.

Dein Freund sollte mal den Narichtendienst ausschalten wenn er die ganze Zeit solche Messages bekommt.

LoRd-MuldeR 10. Okt 2005 20:13

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Wenn dein Programm in der Schleife hängt, kann es nich mehr auf eingaben reagieren. Die Benutzeroberfläche friert komplett ein!

Nimm doch einen Timer und setzt den Befehl (ohne Schleife) in das OnTimer Event! Kannst den Interval ja ganz klein wählen.

skreap 10. Okt 2005 20:16

Re: hilfe!repeat-schleife mit abbruchfunktion
 
hi, hab ihm den Nachrichtendienst ausgeschaltet...
das problem waren ja nicht die messages sondern dass sie in ner endlosschleife waren und dass bekommt man ja über die Konsole ( cmd ) nicht hin oder ?

skreap

GuenterS 10. Okt 2005 20:16

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Zitat:

Zitat von geisi
Das kann so aber nicht funktionieren, wenn man in einer endlosschleife ist, kann kein button gedrückt werden. ich weiß zwar nicht wie es delphi funktioniert, aber in JAVA macht man das mit einem Thread.


Man macht es in Delphi auch mit Threads, kann es aber mit Application.ProcessMessages mehr oder weniger unsauber lösen.

Neotracer64 10. Okt 2005 20:16

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Zitat:

Wenn dein Programm in der Schleife hängt, kann es nich mehr auf eingaben reagieren. Die Benutzeroberfläche friert komplett ein!
Habe es nicht probiert, aber so wie Achtzig es oben geschrieben hat, sollte es funktionieren: Application.ProcessMessages ist das Stichwort.

//EDIT: hmm irgendwie, gleichzeitig gepostet ;)

Zitat:

das problem waren ja nicht die messages sondern dass sie in ner endlosschleife waren und dass bekommt man ja über die Konsole ( cmd ) nicht hin oder ?
Doch. Mit nem Batch Job. Aber warum die Endlosschleife ?

whiteshark 10. Okt 2005 20:18

Re: hilfe!repeat-schleife mit abbruchfunktion
 
@PierreB: deine Variante geht, aber man kann nicht abbrechen. Es fehlt eine Applikation.Processmessage;

Delphi-Quellcode:
var
test : Boolean;

//Jetzt die Schleife bei klick auf Button1
procedure form1.Button2click(Sender : TObject);
begin
repeat
//Dein Net Send Zeug
application.processmessage;
until test = true;
end;

//Jetzt bei Klick auf Button2 wirds abgebrochen
procedure form1.Button2click(Sender : TObject);
begin
test := true;
end;
Ich habe es bei mir probier, es sollte so gehen.

Chegga 10. Okt 2005 20:21

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Hi,

was hat das Ganze mit einer Endlosschleife zu tun? :gruebel:
Zitat:

...ich will ein kleines Program schreiben, dass eine Endlosschleife produziert die jedoch...
Eine Endlosschleife ist imho sowas:

Delphi-Quellcode:
var
  i: Integer;
.
.
.

i := 0;
repeat
  dec(i);
until
  i >= 0;
MfG Marc

LoRd-MuldeR 10. Okt 2005 20:23

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Ja, aber mit der Endlosschleife und dem ProcessMessages hast du ja ne CPU Auslastung von 100%

Ich würd das so machen:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  //Dein Net Send Zeug
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 100;
  Timer1.Enabled := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := False;
end;

PierreB 10. Okt 2005 20:25

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Zitat:

was hat das Ganze mit einer Endlosschleife zu tun?
Nicht viel. Er meinte eine Schleife die etwas immer wiederholt bis man es durch einen Button-Klick abbricht. Vielleicht nicht gute Wortwahl, jedoch kann man aus dem Post erkennen was er machen will. ;)

Nikolas 10. Okt 2005 20:32

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Delphi-Quellcode:
var
  i: Integer;
.
.
.

i := 0;
repeat
  dec(i);
until
  i >= 0;
Das ist aber auch keine Endlosschleife. Irgendwann bis du bei low(Integer) angekommen.

skreap 10. Okt 2005 20:34

Re: hilfe!repeat-schleife mit abbruchfunktion
 
ok...ich werd mal testen und morgen vllt mal meine Kollegen fragen soweit scheint es zu gehen nur Messages kommen nicht an ... trotzdem vielen Dank für eure Hilfe

Tschau
skreap

raffo 10. Okt 2005 21:51

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Ich behelfe mir immer so

Delphi-Quellcode:
Button1.Tag:=0; // Annahme nicht gestoppt

While Button1.Tag=0 do
      begin
// Routine
      Application.ProcessMessages;
      end;

Button1.Tag:=0; // oder zur späteren Auswertung auf Wert lassen

tigerman33 11. Okt 2005 11:44

Re: hilfe!repeat-schleife mit abbruchfunktion
 
Das ist eine Endlosschleife:
Delphi-Quellcode:
while 0<>1 do
  ...

TeronG 11. Okt 2005 11:52

Re: hilfe!repeat-schleife mit abbruchfunktion
 
@skreap: Ändere doch bitte mal deinen Titel .. sonnst wird hier noch seitenweise diskutiert was alles ne Endlosschleife ist oder nicht. :mrgreen:

Zum Problem: Wenn du ne schleife aber keine 100% haben willst kannste ja ein "wait" einbauen (pause ohne sleep siehe DP) ansonnsten würd ich eher nen Timer empfehlen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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