Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Ponavljanje radnje

[es] :: Pascal / Delphi / Kylix :: Ponavljanje radnje

[ Pregleda: 2908 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

saxa
nikolina zorica
student
zagreb

Član broj: 266531
Poruke: 55
*.adsl.net.t-com.hr.



Profil

icon Ponavljanje radnje19.05.2011. u 22:30 - pre 157 meseci
Evo jednog početničkog pitanja: Imam na formi 4Shape-a (Name: A, B, C, D) koji su postavljeni na uglovima i kreću se tako da se na kraju sastaju u sredini....i sad mene zanima na koji način, kojom metodom da ih natjeram da to rade non stop iz početka ...probala sam s Randomize ali ne ide (al postoji mogućnost da je nisam dobro upotrijebila).
A ne bi bila na odmet ni informacija ako ovaj kod nije u skladu s Delphi Obj. Program. tj. ako postoji neki kraći kod za to sve.


procedure TForm1.Timer1Timer(Sender: TObject);
begin
A.Left:= A.Left+1;
A.Top:= A.Top+1;

B.Left:= B.Left+1;
B.Top:= B.Top-1;

C.Left:= C.Left-1;
C.Top:= C.Top+1;

D.Left:= D.Left-1;
D.Top:= D.Top-1;

if A.Left = D.Left then
Timer1.Enabled:= false;
end;

Ako neko ima volje .... velika hvala!!!
 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.dynamic.isp.telekom.rs.



+5 Profil

icon Re: Ponavljanje radnje20.05.2011. u 00:15 - pre 157 meseci
Code:

if A.Left = D.Left then
  begin
     A.Left := 0;
     A.Top := 0;
     D.Left := // pocetna vrednost
     D.Top := // pocetna vrednost
     B.Left := // pocetna vrednost
     ...
end;


pozdrav
 
Odgovor na temu

saxa
nikolina zorica
student
zagreb

Član broj: 266531
Poruke: 55
*.adsl.net.t-com.hr.



Profil

icon Re: Ponavljanje radnje20.05.2011. u 01:22 - pre 157 meseci
tenks
 
Odgovor na temu

saxa
nikolina zorica
student
zagreb

Član broj: 266531
Poruke: 55
*.adsl.net.t-com.hr.



Profil

icon Re: Ponavljanje radnje20.05.2011. u 11:28 - pre 157 meseci
Još jedno pitanjce: ako u projekt dodam još jedan Timer sa sljedećim kodom...tada se Shape-ovi vraćaju istim putem .... i sad:

1) Kako zaustavit Shape-ove kad dodju na početnu poziciju?

2) Kako da se sve to zajedno ponavlja?

procedure TForm1.Timer2Timer(Sender: TObject);
begin
if A.Left = D.Left then
begin
A.Left:= A.Left-1;
A.Top:= A.Top-1;

B.Left:= B.Left-1;
B.Top:= B.Top+1;

C.Left:= C.Left+1;
C.Top:= C.Top-1;

D.Left:= D.Left+1;
D.Top:= D.Top+1;
end;
end;
 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
*.imlek.rs.



+49 Profil

icon Re: Ponavljanje radnje20.05.2011. u 11:35 - pre 157 meseci
Proveris na kraju da li je pozicija X = pocetnoj poziciji i onda iskljucis timer (timer2.enabled:=false), a naravno startujes tvoj timer1 koji krece ponovo (timer1.enabled:=true)
ERROR974
 
Odgovor na temu

saxa
nikolina zorica
student
zagreb

Član broj: 266531
Poruke: 55
*.adsl.net.t-com.hr.



Profil

icon Re: Ponavljanje radnje20.05.2011. u 11:53 - pre 157 meseci
ovako...

u Timer2 sam nakon priloženog koda upisala
if A.Left = 0 then
begin
Timer2.Enabled:= false;
Timer1.Enabled:= true;

ali ne reagira... Shape-ovi se i dalje kreću po timeru2 tj nestaju sa forme... niti se ne zaustavljaju a kamo li da se radnja počne ponavljat
 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
*.imlek.rs.



+49 Profil

icon Re: Ponavljanje radnje20.05.2011. u 11:59 - pre 157 meseci
Onda ti verovatno A.left ne dobija na datom mestu vrednost 0.

Evo ovo sam ja sada probao i radi:


Code:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   i:=i+1;
   label1.caption:=inttostr(i);
   if i=10 then begin
      timer1.enabled:=false;
      timer2.enabled:=true;
   end;

end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
   i:=i-1;
   label1.caption:=inttostr(i);
   if i=0 then begin
      timer2.enabled:=false;
      timer1.enabled:=true;
   end;
end;

ERROR974
 
Odgovor na temu

saxa
nikolina zorica
student
zagreb

Član broj: 266531
Poruke: 55
*.adsl.net.t-com.hr.



Profil

icon Re: Ponavljanje radnje20.05.2011. u 12:10 - pre 157 meseci
Oprosti ako te zamaram...ali ovaj sad kod ne razumijem...čemu sad label
 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
*.imlek.rs.



+49 Profil

icon Re: Ponavljanje radnje20.05.2011. u 12:17 - pre 157 meseci
Ovaj kod je moj test. Label prikazuje vrednost I od 1-10 i nazad. Kod tebe se ne podudaraju vrednosti, cim ti ovo ne radi. Proveri da li ce left ikada biti nula ili je neka druga vrednost. stavi neki label na formu i u kod dodaj label.caption:=inttostr(A.left) pa vidi koje vrednosti dobija i koju ima u trenutku kada treba da se promene timeri.
ERROR974
 
Odgovor na temu

saxa
nikolina zorica
student
zagreb

Član broj: 266531
Poruke: 55
*.adsl.net.t-com.hr.



Profil

icon Re: Ponavljanje radnje20.05.2011. u 12:50 - pre 157 meseci
stavila sam label i ispisao mi je vrijednosti za A: u trenutku pozivanja TImer1 A.Left = 0, a kad se sretnu na sredini A.Left = 110.

evo kodova:
Code:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   A.Left:= A.Left+1;
   A.Top:= A.Top+1;

   B.Left:= B.Left+1;
   B.Top:= B.Top-1;

   C.Left:= C.Left-1;
   C.Top:= C.Top+1;

   D.Left:= D.Left-1;
   D.Top:= D.Top-1;

   if A.Left = D.Left then
   Timer1.Enabled:= false;

   label1.Caption:= IntToStr(a.Left);
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
   //ako umjesto ovog ubacim
   //A.Left = 110  ili A.Left = D.Left
   //Timer2 se uopće ne pali
   if Timer1.Enabled = false then
   begin
     A.Left:= A.Left-1;
     A.Top:= A.Top-1;

     B.Left:= B.Left-1;
     B.Top:= B.Top+1;

     C.Left:= C.Left+1;
     C.Top:= C.Top-1;

     D.Left:= D.Left+1;
     D.Top:= D.Top+1;
   end;
   //i sada kako mi je Label ispisao postavim i NEĆE ga zaustavi
   if A.Left= 0 then
   Timer2.Enabled:= false;
end;



 
Odgovor na temu

saxa
nikolina zorica
student
zagreb

Član broj: 266531
Poruke: 55
*.adsl.net.t-com.hr.



Profil

icon Re: Ponavljanje radnje20.05.2011. u 13:09 - pre 157 meseci
p.s. HVALA na trudu

USPJELA...
ali ne po svom :(

ovako ...ja sam cijelo vrijeme postavljala početnu vrijednost A.Left = 10 jer nisam htjela da mi iz samog ugla počinje ... i tu vrijednost mi je izbacivao i Label ... i nekom logikom mi se činilo da je svejedno koji left postaviš ( ako dođe do njegove vrijednosti timer će se upalit/ugasit ..šta god). E a kad sam stavila A.Left = 0 onda radi ....

... i dobro...mogu se pomirit sa tim ako ne ide drugačije ... ali ako ima dobrovoljaca da mi odgovore iz kojeg razloga ne pali :

A.Left = 10 then

ili u Timer2

A.Left = D.Left

tenks
 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
*.imlek.rs.



+49 Profil

icon Re: Ponavljanje radnje20.05.2011. u 13:12 - pre 157 meseci
Mozes i A.left=10, ali onda u uslovu mora da je A.left=10, a ne 0.
ERROR974
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
*.dynamic.sbb.rs.



+62 Profil

icon Re: Ponavljanje radnje25.05.2011. u 21:36 - pre 157 meseci
Hm...

1) Zasto dva timer-a? Dovoljan je i jedan, ako uvedes varijablu Direction: integer, kojoj dodeljujes vrednosti 1 i -1, respektabilno.
2) Potrazi u help-u SetBounds(), mnogo ces skratiti kod.

Pozz

Rajko
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Ponavljanje radnje

[ Pregleda: 2908 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.