Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit "Sleep"-Anweisung (https://www.delphipraxis.net/11215-problem-mit-sleep-anweisung.html)

bender251 2. Nov 2003 10:39


Problem mit "Sleep"-Anweisung
 
Hallo

ich habe ein Problem mit der Sleep-Anweisung. In meinem Programm, soll ein Label, das bei FormCreate auf visible := false gesetzt wird sichtbar gemacht werden. Aber nur für 2 Sekunden und dann wieder unsichtbar werden.

Ich habe es folgendermaßen versucht:

Delphi-Quellcode:
label1.visible := true;
sleep(2000);
label1.visible := false;
Das funktioniert aber irgendwie nicht. :gruebel: Das Label wird icht angezeigt.
Wenn ich zu Kontrollzwecken vor das Sleep eine Showmessage einbaue, dann wird das Label angezeigt, wahrscheinlich, weil dann die Sleep-Anweisung nicht unmittelbar hinter der visible := true Anweisung kommt.
Kann mir jemand sagen warum das nicht funktioniert bzw. wie das funktioniert?

Mit freundlichen Grüßen
bender251

Daniel B 2. Nov 2003 10:42

Re: Problem mit "Sleep"-Anweisung
 
Mach mal vor und hinter dem Sleep ein Application.ProcessMessages.

Luckie 2. Nov 2003 10:44

Re: Problem mit "Sleep"-Anweisung
 
Das funktioniert nicht weil sleep dein Programm ganz lahm legt. Lösung: DELAYDELAY

bender251 2. Nov 2003 10:54

Re: Problem mit "Sleep"-Anweisung
 
@Daniel B: Cooooool...............Vielen Dank für die Antwort. Klappt prima. :cheers:

Nur mal interessehalber: Was bewirkt dieses Application.Processmessages? Die Hilfe gibt da nicht so die Auskunft zu, wenn ich nichts übersehen habe.

Gruß bender251

Dagon 2. Nov 2003 10:56

Re: Problem mit "Sleep"-Anweisung
 
Das unterbricht das Programm, damit Windows auf Ereignisse reagieren kann.

bender251 2. Nov 2003 10:59

Re: Problem mit "Sleep"-Anweisung
 
Junge geht das heir schnell mit den Antworten. :thuimb:

Vielen Dank an alle.

Gruß bender251

Luckie 2. Nov 2003 11:02

Re: Problem mit "Sleep"-Anweisung
 
Ähm, umgekehrt. Es unterbricht eine Routine im eigenen Programm, damit das eigene Programm dazu kommt die MessageLoop abzuarbeiten und so auf Nachrichten von Windows reagieren kann.

Wozu soll ich mein Programm unterbrechen, damit Windows auf Nachrichten reagiert? :mrgreen:

himitsu 2. Nov 2003 11:11

Re: Problem mit "Sleep"-Anweisung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Luckie,

wieso soll das nicht funktionieren?

Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
  Begin
    Label1.Visible := True;
    Application.ProcessMessages;
    Sleep(2000);
    Label1.Visible := False;
  End;
Delphi-Quellcode:
Label1.Visible := True;
Application.ProcessMessages;
Sleep(2000);
Label1.Visible := False;
Application.ProcessMessages;
{nachfolgende Anweisungen}

Luckie 2. Nov 2003 11:14

Re: Problem mit "Sleep"-Anweisung
 
Habe ich irgendwo, irgendwas geschrieben, dass was nicht funktionieren soll? Die Erklärung von the_master war nur verkehrtrum.

himitsu 2. Nov 2003 11:16

Re: Problem mit "Sleep"-Anweisung
 
Zitat:

Das funktioniert nicht weil sleep dein Programm ganz lahm legt.

Luckie 2. Nov 2003 11:19

Re: Problem mit "Sleep"-Anweisung
 
Jupp. Das war seine Version ohne Application.Processmessages und da ist es zutreffend.

himitsu 2. Nov 2003 11:20

Re: Problem mit "Sleep"-Anweisung
 
Ach so, dachte das war 'ne Antwort auf Daniel B's Post :oops:

Luckie 2. Nov 2003 11:21

Re: Problem mit "Sleep"-Anweisung
 
Als ich angefangen hatte, hatte er noch nicht gepostet.

Christian Seehase 2. Nov 2003 13:31

Re: Problem mit "Sleep"-Anweisung
 
Moin Luckie,

Zitat:

Zitat von Luckie
Das funktioniert nicht weil sleep dein Programm ganz lahm legt.

Na ja, nicht das ganze Programm, sondern den Thread in dem es aufgerufen wird.
Wenn das der Hauptthread des Programmes reagiert dieser für die angegebene Zeitspanne auf nichts mehr, abgespaltene Threads laufen aber weiter.
[EDIT]
Ausser sie greifen während des Sleep Intervalls auf Teile des Hauptthreads zu, z.B. per Synchronize, dann bleiben diese auch solange stehen und warten.
[/EDIT]

Luckie 2. Nov 2003 13:46

Re: Problem mit "Sleep"-Anweisung
 
Nun ja, ich wollte hier nicht noch mehr Verwirrung stiften. Wie du in dem Shellexcute Thread mit deinem letzten Posting. :roll:

Rumpi 2. Nov 2003 17:35

Re: Problem mit "Sleep"-Anweisung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

ich habe mir nicht die Mühe gemacht alle postings genau zu lesen,
jedoch würde auch hier die TTimerThread class helfen.

Delphi-Quellcode:
procedure Form1.OnCreate;
var
  aTimer : TTimerThread;
begin
  // dein Label ist schon sichtbar !
  FTimer := TTimer.Create( 2000, OnTimer );
end;

procedure Form1.OnTimer( Sender: TObject );
begin
  DeinLabel.Visible := False;
  if Sender is TTimerThread then
    TTimerThread( Sender ).Stop; // sonnst bist du hier alle 2sec !
  // Nicht Free oder NilAndFree !
  // FreeOnTerminate = True im Thread
end;

mfg Rumpi

XeRo 2. Nov 2003 19:24

Re: Problem mit "Sleep"-Anweisung
 
Man könnte auch vor dem Sleep eine Form1.Refresh geben


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