Brak wykoniania instrukcji przed instrukcją "Sleep"

0

Witam
Mam dziwny problem z instrukcją Sleep otóż nie wykonują mi się instrukcje przed nią.

procedure TForm1.Button1Click(Sender: TObject);
begin
  Begin
    Shape3.Brush.Color := clGreen;
    Sleep(5000);
    Shape3.Brush.Color :=clBlue;
  end;

Pozdrawiam i z góry dziękuje za pomoc

0
procedure TForm1.Button1Click(Sender: TObject);
begin
  Begin
    Shape3.Brush.Color := clGreen;

    application.ProcessMessages //   !!!!!!

    Sleep(5000);
    Shape3.Brush.Color :=clBlue;
  end;
0

Dziękuję bardzo za pomoc, mam jeszcze jedno pytanie szukałem oczywiście na nie odpowiedzi, ale widocznie za słabo a konkretnie chciałbym wiedzieć jak na przykład w pętli sprawdzić czy został wciśnięty konkretny przycisk np. Button2.
Pozdrawiam

0

Jeżeli użyjesz sleep to program przez te 5 sek nie działa, więc zrób coś takiego:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Shape3.Brush.Color:=clGreen;
  Timer1.Interval:=5000;
  Timer1.Enabled:=true;
end;

procedure TForm1.Timer1OnTimer(Sender: TObject);
begin
  Timer1.Enabled:=false;
  Shape3.Brush.Color:=clBlue;
end;
0

No właśnie zauważyłem :)
A jeżeli bym chciał np. za kolejne 5 sekund zmienić kolor innego shape-a to powinienem robić to już w oddzielnym timerze?

0
const Tab:array of record Shape:TShape; Color:TColor; Interval:Integer; end;

procedure TForm1.FormOnCreate(Sender: TObject);
begin
  SetLength(Tab,3);
  Tab[0].Shape:=Shape3; Tab[0].Color:=clGreen; Tab[0].Interval:=5000;
  Tab[1].Shape:=Shape3; Tab[1].Color:=clBlue; Tab[1].Interval:=10;
  Tab[2].Shape:=Shape2; Tab[2].Color:=clGreen; Tab[2].Interval:=5000;
  Timer1.Interval:=100;
end;

procedure TForm1.Timer1OnTimer(Sender: TObject);
var T:Integer;
begin
  Timer1.Enabled:=false;
  T:=Timer1.Tag;
  Tab[T].Shape.Brush.Color:=Tab[T].Color;
  Timer1.Interval:=Tab[T].Interval;
  Timer1.Tag:=(T+1)mod(Length(Tab));
  Timer1.Enabled:=true;
end;
0

Ok dzięki wielkie, a o Tym przechwytywaniu zdarzenia wciśnięcia buttona mogę się coś dowiedzieć? Czy szukać dalej?

0

Możesz użyć właściwość Tag przycisku do zaznaczenia że był wciśnięty.
Nie rób pętli w programie które trwają dłużej niż kilkadziesiąt milisekund.

0

Mam za zadanie zrobić symulację sygnalizacji świetlnej, więc pętla będzie trwała dłużej...

0

Poszukaj na tym forum, jest wszystko gotowe tylko tablice wypełnić odpowiednio.

1 użytkowników online, w tym zalogowanych: 0, gości: 1