Wywoływanie Button.Click co określony czas

0

Cześć.
Jak zrobić wywołanie zdarzenia Button1Click Drugim Buttonem
w powtarzającej się sekwencji co x sekund (button1Click)
o określonej z góry ilości powtórzeń
gdzie odstępy czasowe oraz ilość powtórzeń podajemy z Edit1 oraz Edit2

0

Jak zrobić wywołanie zdarzenia Button1Click Drugim Buttonem

procedure TForm1.Button2Click(Sender: TObject);
begin
  Button1.Click();
end;

w powtarzającej się sekwencji co x sekund (button1Click)

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Button2.Click();
end;

o określonej z góry ilości powtórzeń

Przechowuj ją w TTimer.Tag;

gdzie odstępy czasowe oraz ilość powtórzeń podajemy z Edit1 oraz Edit2

Timer1.Interval := StrToInt(Edit1.Text);
Timer1.Tag := StrToInt(Edit2.Text);

Nie wnikam po co Ci takie kombinacje.

0

Wielkie Dzięki :)

0

Przystosuję nieco odpowiedź przedpiścy.
Button1Click to zwykła procedura z jednym parametrem. Można ją wywołać w dowolnym miejscu kodu. Parametr Sender jest używany do przekazania tej procedurze kto ją zawołał. Jeśli nie używasz w niej tego parametru, to przy wywołaniu możesz podać nawet nil. Czyli możesz położyć komponent TTimer na formę i ustawić mu Enabled na false. Wtedy będzie nieaktywny.
Tag w Timer to takie miejsce do przechowywania czegoś. Możesz wkładać co chcesz. Na początku jest tam zero. W zdarzeniu OnTimer Twojego zegara wstaw np:

If Timer1.Tag >= StrToInt(Edit2.Text) then
begin
  Timer1.Enabled := false;
  Timer1.Tag := 0;
  Button2.Enabled := true;
end
else
begin
  Inc(Timer1.Tag);
  Button1Click(nil);
  Button2.Enabled := false;
end;

no i ten drugi przycisk niech robi tylko:

Timer1.Enabled := true 

cholerka, jak tu teraz koloruje się kod źródłowy?.

0

Przy Twoim burzy się kompilator w

linijce

Inc(Timer1.Tag);

Left side cannot be assigned to

0
Sadam2 napisał(a):

Przystosuję nieco odpowiedź przedpiścy.
Button1Click to zwykła procedura z jednym parametrem.

Bzdury napisałeś w kodzie. Metoda zdarzeniowa Button1Click to coś zupełnie innego niż wywołanie kliknięcia: Button1.Click.

0

Dzięki Chłopaki
Dzięki Waszej pomocy wyszło mi coś takiego
Działa tak jak chciałem ale i tak Was na końcu o coś poproszę jeszcze
ale jeśli już tu widzicie błędy to proszę wskazujcie na tym początkowym etapie moje nauki nawet
najostrzejsza krytyka jest mile widziana :)

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Timer1.Tag:= Timer1.Tag-1;
   labelEndeTag.caption:='Zakonczenie programu za: ' + inttostr(Timer1.Tag);
   button1.Click();
   if Timer1.Tag<=0 then
   timer1.Enabled:=False;
end;

procedure TForm1.ButtonStartClick(Sender: TObject);
begin
   timer1.interval:=StrToint(Editinterval1.Text)*1000;
   Timer1.Tag:=StrToInt(EditTag.Text);
   timer1.Enabled:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LabelNrButtonClick.Caption :='Button 1' ;
end;

procedure TForm1.Button2Click(Sender: TObject);
 begin
  LabelNrButtonClick.Caption:='Button 2'
end;

procedure TForm1.ButtonStopClick(Sender: TObject);
begin
 timer1.Enabled:=False;
end;

A teraz ta milsza cześć :) Pytanie

procedure TForm1.Timer1Timer(Sender: TObject);

Moja prośba o pomoc w ułożeniu pętli.
Po Tym :

  if Timer1.Tag<=0 then

Jest kolejne zdarzenie Buton2Click
Po wykonaniu mamy mieć określoną przerwę czasowa przed wykonaniem Butonn3Click
określamy ją Edit3.Text

Po przerwie określonej mamy zdarzenie Button3Click

a po jego wykonaniu zapętlamy (wracamy do początku od nowa)

aż do kliku w ButtonStopClick, zamknięciu programu, śmierci użytkownika :) etc.

W Button2 i Button3 są jednorazowe ale są w nich dźwięki mp3 muszą się odegrać do końca

0

Ja NIE chce nadużywać Waszej pomocy też nie liczę na gotowe rozwiązane.

Robię to pod trening interwałowy bo te wszystkie w smartfonach to porażka kiedyś troszkę
pisałem ale to lata świetlne,

Więc trochę wróciłem do tematu jak pisałem ale za stary jestem na przerabianie Delphi

Proszę tylko o budowę pustej takiej pętli jak powinna wyglądać z tym zapętleniem ja powoli sobie ją uzbroję

I jak wymusić (nie wiem czy konieczne) odegranie dźwięku Mp3 przed kolejnym zdarzeniem OnClick kolejnego buttona,moze się uruchomi dopiero po jego ukończeniu, wybaczcie nie pamiętam.
Z góry bardzo dziękuję

0

Prawdę mówiąc nie rozumiem, do czego dążysz z tą, jak to nazywasz, pętlą. Ale może potrzebujesz nie jednego zegara, ale dwóch?

0

A ja zadam inne pytanie. Co dokładnie chcesz osiągnąć? Często ludzie pytają się, jak skonstruować armatę, a potem okazuje się, że tak naprawdę potrzebują packi na muchy. Więc napisz, co dokładnie chcesz osiągnąć, bo wydaje mi się, że starasz się coś udziwnić.

0

Właśnie tego potrzebuje co napisałem nie armaty ale by się też przydała :)
potrzebuje obsłużyć trzy butony pod którymi mam procedury ale w określonych odstępach czasu
odstępami chcę sterować

Button 1 o x powtórzeniach ilością powtórzeń i ilością czasu miedzy nimi sterujemy po wykonaniu ostatniego
buton 2 po nim określona ilość czasu przerwy
i buton 3 po wykonaniu odegraniu dźwięku powracamy do początku
i tak w kółko aż buttonem stop zatrzymamy

0

Inaczej, jaki jest cel aplikacji związany z tymi buttonami? Nie wiem, robisz grę, gdzie postać skacze albo coś takiego?

0

program do interwału sportowego bo co ściągnę to albo kupa reklam a nie funkcjonalne, siłke mam w domu więc wersja nie mobilna mi w zupełności mi wystarczy.
Już mam wszystko zrobione tylko obsłużyć to z czasem tylko musi być warunek odegrania dźwięku do końca przed rozpoczęciem następnego buttonClick chyba że tak jest samo od siebie

Dobra kuknijcie jeszcze raz gdzie mam błąd że Timer2 nie odpowiada nie ma reakcji
ale to jest to o co mi chodzi tylko może gdzieś mam zonka i nie wiem gdzie

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Tag:= Timer1.Tag -1;
  labelEndeTag.caption:='Zakonczenie programu za: ' + inttostr(Timer1.Tag);
if Timer1.Tag =0 then
 begin
  timer1.Enabled:=False;
  button2.Click() ;
  Timer2.Enabled:=true;
 end;

end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
    Timer2.interval:= Timer2.interval -1;
    label1.caption:='Zakonczenie ' + inttostr(Timer2.interval);
if Timer2.Interval = 0 then
begin
  timer2.Enabled:=False;
  button3.Click() ;
 end;
end;


procedure TForm1.ButtonStartClick(Sender: TObject);
begin
  Timer1.Interval:=StrToInt(EditInterval1.Text)*1000;
  Timer1.Tag:=StrToInt(EditTag.Text);
  Timer2.Interval:=StrToInt(Edit1.Text)*1000;
  timer1.Enabled := True   ;

  end;
0

Jest znalazłem Dziękuje za pomoc
Wybaczcie ze namieszałem z pętlami ale jak już mówiłem lata świetlne od pisania.
Pozdrawiam

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