| Autor |
Beitrag |
BuddyPhilipp
Hält's aus hier
Beiträge: 10
WinXP
Delphi 6
|
Verfasst: So 30.03.08 20:20
Hallo Community!
Ich habe mit Button1 eine Prozedur laufen, die ich mit Button2 unterbrechen/abbrechen möchte,
wie lautet der richtige Code dafür?
Ungefähr so brauche ich es:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button2Click(Sender: TObject); begin Button1.Stop; end; |
Gibt es dafür einen Befehl?
Habe leider nichts gefunden!
PS: Habe die Forum-Suche benutzt, aber nichts gefunden, was meinem Problem entspricht, deswegen der neue Thread 
|
|
nagel
      
Beiträge: 708
Win7, Ubuntu 10.10
|
Verfasst: So 30.03.08 20:35
Hallo,
so wie du es beschreibst, hast eine Schleife laufen, die von einem Button abgebrochen werden soll. Wenn das so ist, brauchst du eine globale Boolean-Variable, die als Abbruchbedingung für die Schleife eingesetzt wird. Der zweite Button ändert dann den Wert dieser Variable. Damit das funktioniert musst du in der Schleife noch Application.ProcessMessages einfügen.
|
|
BuddyPhilipp 
Hält's aus hier
Beiträge: 10
WinXP
Delphi 6
|
Verfasst: So 30.03.08 20:55
nagel hat folgendes geschrieben: | Hallo,
so wie du es beschreibst, hast eine Schleife laufen, die von einem Button abgebrochen werden soll. Wenn das so ist, brauchst du eine globale Boolean-Variable, die als Abbruchbedingung für die Schleife eingesetzt wird. Der zweite Button ändert dann den Wert dieser Variable. Damit das funktioniert musst du in der Schleife noch Application.ProcessMessages einfügen. |
Bin noch recht unwissend im Delphi-Bereich, deswegen kann ich dir nur zum Teil folgen, aber danke bis hierher!
Wie es der Zufall so will, habe ich in meinem Button ein Application.ProcessMessages-Befehl.
Wobei ich sagen muss, dass mein Button1 gar keine Schleife ist, sondern einfach nur ein sehr, sehr lange Prozedur, die ich leider nicht durch eine Schleife vereinfachen konnte. Warum ich das nicht konnte, wäre hier an dieser Stelle aber etwas zu kompliziert zu erklären
Meine Button1-Prozedur besteht aus diesem Befehl:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| TButton(FindComponent('Button' + Label1.Caption)).Click; TButton(FindComponent('Button' + Label2.Caption)).Click; TButton(FindComponent('Button' + Label3.Caption)).Click; TButton(FindComponent('Button' + Label4.Caption)).Click; TButton(FindComponent('Button' + Label5.Caption)).Click; TButton(FindComponent('Button' + Label6.Caption)).Click; startTime := GetTickCount; while GetTickCount < startTime + 100 do begin sleep(256); Application.ProcessMessages; end; |
Allerdings kommt dieser Befehl nicht nur ein einziges Mal vor, sondern immerzu aufeinander folgend, bis hin zu
...Label330.Caption... (jetzt bitte keine Witze  )
Wo und wie muss ich jetzt die globale Boolean-Variable und deren Bedingung einbinden?
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: So 30.03.08 21:18
Hi,
1) Da es sich bei sleep() um busy-waiting handelt(oder  ?), kannst du das sleep weglassen. verkürzt nur die Reaktionszeit deines Programms auf diese Messages.
2) Ob sich das nicht durch eine Schleife vereinfachen lässt, wäre ich skeptisch, aber wenn du den code nciht rausrücken willst...
3) Wenn sich eine Schleife nicht vermeiden lässt, wirst du wohl von Hand in gewissen Abständen in deiner Prozedur folgende Zeile einbringen müssen:
Delphi-Quelltext
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
BuddyPhilipp 
Hält's aus hier
Beiträge: 10
WinXP
Delphi 6
|
Verfasst: So 30.03.08 21:37
Hidden hat folgendes geschrieben: | Hi,
1) Da es sich bei sleep() um busy-waiting handelt(oder ?), kannst du das sleep weglassen. verkürzt nur die Reaktionszeit deines Programms auf diese Messages.
2) Ob sich das nicht durch eine Schleife vereinfachen lässt, wäre ich skeptisch, aber wenn du den code nciht rausrücken willst...
3) Wenn sich eine Schleife nicht vermeiden lässt, wirst du wohl von Hand in gewissen Abständen in deiner Prozedur folgende Zeile einbringen müssen:
Delphi-Quelltext
mfG, |
1) Wow, danke, wäre mir nicht aufgefallen  Den Quelltext zu
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| startTime := GetTickCount; while GetTickCount < startTime + 100 do begin sleep(256) Application.ProcessMessages; end; |
hatte ich auch bloß hier aus'm Forum, aus einem anderen Thread.
2) Das mit dem Rausrücken des ganzen Codes ist so eine Sache...
Klar, würde ohne Probleme mein ganzes Programm zum Download anbieten, da das aber mein Projekt für das letzte Kurshalbjahr Informatik ist und der Lehrer bei der Kontrolle des Programms garantiert das Internet durchforsten wird nach ähnlichen Programmen, wo ich irgendwas geklaut haben könnte und er dann hier das komplette Programm zum Download angeboten findet... habe keine Lust dem dann klar machen zu müssen, dass der User hier wirklich ich bin, wenn du ein wenig verstehst, was ich meine
Außerdem ist mein Programm stolze 8 MByte groß, oder zumindest der Ordner, in dem es sich befindet.
Das liegt an meinen etwas mehr als 140 Sound-Dateien, die ich benötige für mein Delphi-Projekt
3) Das ist kein Problem für mich, bin ich gewohnt bis jetzt...^^
Mein ganzes Programm ist sehr unprofessionell*, aber zu 95 % fertig, worauf ich sehr stolz bin!
* = meine fast 3000 Zeilen Quellcode, über 200 (von Hand erstellte) Buttons, 330 (von Hand erstellte) Edit-Felder und 330 (von Hand erstellte) Labels sprechen da wohl für sich
Die Copy & Paste - Befehle beherrsche ich dafür jetzt im Schlaf
Edit: jetzt hatte ich ganz vergessen, auf deine Antwort einzugehen^^ :
Delphi-Quelltext
--> Abbruch ist dabei die globale Boolean-Variable, nehme ich an?
--> Exit ist ein Befehl, der die jeweilige Prozedur auf der Stelle beendet?
--> Kannst du mir vielleicht noch zeigen, wie ich eine Boolean-Variable deklariere?
Dann hätte ich es soweit
Dankeschön euch allen 
|
|
nagel
      
Beiträge: 708
Win7, Ubuntu 10.10
|
Verfasst: So 30.03.08 21:56
BuddyPhilipp hat folgendes geschrieben: |
--> Abbruch ist dabei die globale Boolean-Variable, nehme ich an?
--> Exit ist ein Befehl, der die jeweilige Prozedur auf der Stelle beendet?
|
Ja. Beides korrekt  .
BuddyPhilipp hat folgendes geschrieben: |
--> Kannst du mir vielleicht noch zeigen, wie ich eine Boolean-Variable deklariere?
|
Du schreibst bei deiner Form in den private-Bereich Abbruch: Boolean; (wenn du sie Abbruch nennen willst), also genauso, wie du andere Variablen auch deklarierst.
Dann brauchst du nur noch eine Button2Click-Prozedur, die Abbruch auf True setzt.
Und nicht vergessen, Abbruch in Button1Clickam Anfang auf False zu setzen.
BuddyPhilipp hat folgendes geschrieben: | Dankeschön euch allen  |
Bitteschön. Hoffe jetzt funktioniert's wie gewünscht.
|
|
BuddyPhilipp 
Hält's aus hier
Beiträge: 10
WinXP
Delphi 6
|
Verfasst: So 30.03.08 22:19
Juhuuu!!
Nagel und Hidden...
ich danke euch beiden! Habt mir sehr geholfen!
Jetzt kann ich mein Programm wohl zu 98,5 % als fertig bezeichnen...
nun noch ein bisschen Feintuning und das war's
Ach so, worum es sich überhaupt handelt bei meinem Projekt:
Ich nenne es ganz liebevoll "Das Gitarrenprogramm"...
durch Buttons habe ich das komplette Griffbrett einer Gitarre dargestellt, klickt man einen dieser Buttons an,
wird der dem der Saite und dem Bund zugehörige Ton gespielt und der Button auf dem Griffbrett mit einem dezenten 'x' markiert.
So kann man auf allen sechs Saiten (= sechs Reihen Buttons) einen Button markieren und diese dann zusammen als Akkord klingen lassen, durch einen Druck auf den Knopf "Play Chord".
Diesen Akkord kann man anschließend mit einem Druck auf einen "Akkord-Speicher-Knopf" speichern.
Macht man dies des öfteren hintereinander, hat man vielleicht 4 Akkorde zusammengestellt und gespeichert, kann man diese Akkord-Reihenfolge durch meinen "Play Song"-Button abspielen lassen.
Bis hierher mitgekommen..?
Denn an dieser Stelle kommt mein mit eurer Hilfe geschaffener "Stop Song"-Knopf ins Spiel, mit dem ich den Song, nachdem man "Play Song" gedrückt hat und das Lied gespielt wird, stoppen kann, um vielleicht noch ein paar Akkorde mittendrin im Song auszutauschen oder am Ende welche anfügen kann, ohne jedesmal das komplette Stück bis zum Ende hören zu "müssen".
Das ist mein Programm, grob & kurz zusammengefasst
Bei Gelegenheit & nach absolviertem Feintuning kann ich es dann ja mal hochladen via Rapidshare o.ä.,
falls so ein sonderbares Programm jemanden interessieren sollte...
So, jetzt nochmal: nagel, Hidden, danke! 
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 31.03.08 00:13
kannst du dann mal dein programm als zip in die freeware sparte reinstellen. ich frag mich wie das so aussieht und funktioniert.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
BuddyPhilipp 
Hält's aus hier
Beiträge: 10
WinXP
Delphi 6
|
Verfasst: Mo 31.03.08 15:25
elundril hat folgendes geschrieben: | kannst du dann mal dein programm als zip in die freeware sparte reinstellen. ich frag mich wie das so aussieht und funktioniert.
lg elundril |
Klar gerne, aber das mache ich voraussichtlich erst nächste Woche, ich verlink dann hier auch noch mal... 
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mo 31.03.08 15:34
ähh, 330 Edits und 330 Labels (von Hand), schon mal LabeledEdit gesehen, Karteikarte "Zusätzlich" und dringends Konzept überdenken, dass kann niemand sinnvoll überschauen!
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mo 31.03.08 15:40
elundril hat folgendes geschrieben: | kannst du dann mal dein programm als zip in die freeware sparte reinstellen. ich frag mich wie das so aussieht und funktioniert.
|
Nach Abgabezeitpunkt, dann.
Kroko hat folgendes geschrieben: | | ähh, 330 Edits und 330 Labels (von Hand), schon mal LabeledEdit gesehen, Karteikarte "Zusätzlich" und dringends Konzept überdenken, dass kann niemand sinnvoll überschauen! |
Hmm... müsste ich einmal sehen. Im Prinzip kannst du ja mal einen Screenshot posten.
Was die vielen Töne angeht, schau dir mal Windows.beep an, da kannst du Tonlänge und -frequenz einstellen.
Du kannst ja auch den user auswählen lassen, welche datei abgespielt wird.
Auch hier nochmal ein Tutorial, kannst ja mal reinschauen ob das für dich was ist: www.christian-stelzm...rtikel/crashkurs.htm .
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
|