Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - sleep-Befehl vorrangig?
Caesar44 - Di 17.06.08 21:00
Titel: sleep-Befehl vorrangig?
Hi an alle hier ,
ich bin hier neu im Forum und noch ziemlicher Anfänger in Delphi! Ich bin mir nicht ganz sicher, ob die Frage in diese Sparte des Forums passt, wenn nicht bitte verschiebn oder schließen :-).
Meine Frage bezieht sich auf die sleep-Funktion
Wenn ich folgenden Programmtext eingebe:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Button3Click(Sender: TObject); begin Image1.picture.LoadFromFile ('J:\Eigene Bilder\Talk_Human.bmp'); sleep(300); Image1.picture.LoadFromFile ('J:\Eigene Bilder\Talk_PC.bmp'); end; |
wird nicht, wie ich es wollte zuerst das eine Bild und dann nach 300 Millisekunden das andere Bild geladen, sondern 300 Millisekunden gewartet und dann das zweite Bild angezeigt.
Es Hat sich gleich noch ein zweites problem zu dem ersten hinzugesellt:
Ich kann mein Programm nicht starten, weil es sich nachdem ich f9 gedrückt habe sich sofort wieder in den Ausgangszustand zurückversetzt... :-(
Was mache ich falsch?
Hoffe ihr könnt mir helfen
Gruß Caesar44
Moderiert von
Narses: Delphi-Tags hinzugefügt
Xentar - Di 17.06.08 21:16
Für die zweite Frage machst du bitte ein neues Thema auf.
Zum ersten Problem:
Sleep sorgt dafür, dass die Anwendung komplett pausiert wird (Eigentlich nur der aktuelle Thread, in diesem Fall hast du aber nur einen, nämlich den Haupt-Thread).
Es wird zwar das erste Bild gesetzt - dadurch dass die Anwendung direkt danach aber "hängt" kommt das Programm aber nicht dazu, dieses Bild zu zeichnen / anzuzeigen.
Vorschlag: Benutz einen Timer (In der Komponentenpalette, zu finden unter System)
Anwendung: Stell den Timer auf 300. Wenn du auf den Button klickst, setzt du das erste Bild und startest den Timer. Wenn der Timer anschlägt (Event OnTimer) deaktivierst du ihn wieder, und setzt gleichzeitig das zweite Bild.
Caesar44 - Di 17.06.08 21:42
Vielen Dank für die Antwort,ich habe die Timerfunktion sofort ausprobiert! Allerdings ist bei mir, obwohl ich den Timerintervall immer gleich ist, die Zeit bis er das nächste Bild anzeigt unterschiedlich lang.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Timer1Timer(Sender: TObject); begin image1.Picture.LoadfromFile ('J:\Eigene Bilder\Small_Human.bmp'); end;
procedure TForm1.Button1Click(Sender: TObject); begin image1.Picture.LoadfromFile ('J:\Eigene Bilder\Talk_Human.bmp'); Timer1.Enabled := True;
end; |
ich mach wieder was falsch oder?
Gruß Caesar44
Xentar - Di 17.06.08 21:43
Du musst den Timer auch standardmäßig, also zur Entwurfszeit, deaktivieren.
Caesar44 - Di 17.06.08 21:55
Xentar hat folgendes geschrieben: |
| Du musst den Timer auch standardmäßig, also zur Entwurfszeit, deaktivieren. |
Stimmt natürlich. Danke für die freundliche Hilfe Xentar, der Thread kann dann wohl als beantwortet gelten :D
Schönen Abend euch noch allen!
Caesar44
Yogu - Di 17.06.08 21:59
Titel: Re: sleep-Befehl vorrangig?
Caesar44 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.Button3Click(Sender: TObject); begin Image1.picture.LoadFromFile ('J:\Eigene Bilder\Talk_Human.bmp'); sleep(300); Image1.picture.LoadFromFile ('J:\Eigene Bilder\Talk_PC.bmp'); end; | |
Füge doch einfach einen
Application.Processmessages ein. Dann hat Delphi auch Zeit, das erste Bild anzuzeigen :idea:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button3Click(Sender: TObject); begin Image1.picture.LoadFromFile ('J:\Eigene Bilder\Talk_Human.bmp'); Application.ProcessMessages; sleep(300); Image1.picture.LoadFromFile ('J:\Eigene Bilder\Talk_PC.bmp'); end; |
Aber natürlich ist ein Timer immer noch die bessere Wahl - da wird das Programm wenigstens nicht angehalten.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!