Autor Beitrag
Caesar44
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Di 17.06.08 21:00 
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:
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: 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.


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 17.06.08 21:43 
Du musst den Timer auch standardmäßig, also zur Entwurfszeit, deaktivieren.
Caesar44 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Di 17.06.08 21:55 
user profile iconXentar 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 17.06.08 21:59 
user profile iconCaesar44 hat folgendes geschrieben:
ausblenden 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:

ausblenden 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.