Pętla zmiany koloru/ Delphi

0

Witam

Mam problem ponieważ chciałbym zrobić program który po przyciśnięciu buttona zacznie zmieniać tło na różne kolory do czasu gdy na nowo naciśniemy buttona. Próbowałem z case'm i repeat ale nie działało i odpalało mi tylko ostatnio kolor z listy. Proszę o wyjaśnienie, gotowca lub o linka.

0

Taaa, wiadomo przecież że najlepiej gotowca, bo jaśnie Panu się nie chce poszukać nic w google ani poczytać
podstaw i coś samemu wymyśleć. Nie wiem jaką zmianę kolorów chciałeś, ale poniżej masz przykładowy kod i
tak się nic samemu nie nauczysz, poza tym takie rzeczy jak losowanie, wątek i kolory - to temat do Newbie.
A co do linka to polecam http://google.pl - znajdziesz tam to czego potrzebujesz do samodzielnej nauki :P

//...
  TLosowanieWatek = class(TThread)
    procedure Execute; override;
  end;

var
  Form1 : TForm1;
  Wtk : TLosowanieWatek;
  TrwaLosowanieKolorow : boolean;

const
  CaptionyTab : array[boolean] of string = ('Losuj kolory', 'Przerwij losowanie');

implementation

{$R *.dfm}

procedure TLosowanieWatek.Execute;
begin
  while Self.Suspended = False do
  begin
    with Form1 do
    begin
      Color := RGB(Random(256), Random(256), Random(256));
      Sleep(100);
    end;
  end;
end;

procedure TForm1.FormCreate(Sender : TObject);
begin
  Randomize;
  TrwaLosowanieKolorow := False;
  LosujBtn.Caption := CaptionyTab[TrwaLosowanieKolorow];
end;

procedure TForm1.LosujBtnClick(Sender : TObject);
begin
  if TrwaLosowanieKolorow = True then
  begin
    Wtk.Suspend;
  end
  else
  begin
    Wtk := TLosowanieWatek.Create(False);
  end;
  TrwaLosowanieKolorow := not TrwaLosowanieKolorow;
  LosujBtn.Caption := CaptionyTab[TrwaLosowanieKolorow];
end;
0

mysle ze na taym etapie nauki bardziej spodoba mu sie Timer;]
wrzuc procedurke losowania do Timer'a (taki komponent ikonka zegara) i ustaw interval na np 10 (to czas -w milisekundach, czyli 1/1000sek -co jaki ma zostac wykonana operacja) a potem w onClick przycisku tylko:

timer.enabled:=not timer.enabled;

a dlaczego nie petla repeat-until?
bo piszesz program jednowątkowy, który jak wejdzie w petle to zaczyna wykonywac operacje tylko w niej. jak w tym czasie klikniesz jakis przycisk to program na to nie zareaguje bo bedzie zajety wykonywaniem operacji znajdujacych sie w petli.
mozesz niby wymusic zeby w petli sprawdzal czy bylo jakies inne wyarzenie uzywajac:
application.processMessagess;
ale to praktycznie i tak nic nie da, bo program bedzie bardzo mulil i uzycie procesora bedzie 100%.

0

Dzięki za pomoc. Olesio dzięki że zrobiłeś analizę psychologiczną mojej osobowości ale twój gotowiec to nie za bardzo to o co mi chodziło, a jednak bardziej zależało mi na wyjaśnieniu.

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