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
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.
Wielkie Dzięki :)
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?.
Przy Twoim burzy się kompilator w
linijce
Inc(Timer1.Tag);
Left side cannot be assigned to
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.
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
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ę
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?
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ć.
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
Inaczej, jaki jest cel aplikacji związany z tymi buttonami? Nie wiem, robisz grę, gdzie postać skacze albo coś takiego?
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;
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