[ saxa @ 19.05.2011. 22:30 ] @
| 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!!! |
[ salaczr @ 20.05.2011. 00:15 ] @
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
[ saxa @ 20.05.2011. 01:22 ] @
tenks
[ saxa @ 20.05.2011. 11:28 ] @
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;
[ Vic @ 20.05.2011. 11:35 ] @
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)
[ saxa @ 20.05.2011. 11:53 ] @
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
[ Vic @ 20.05.2011. 11:59 ] @
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;
[ saxa @ 20.05.2011. 12:10 ] @
Oprosti ako te zamaram...ali ovaj sad kod ne razumijem...čemu sad label
[ Vic @ 20.05.2011. 12:17 ] @
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.
[ saxa @ 20.05.2011. 12:50 ] @
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;
[ saxa @ 20.05.2011. 13:09 ] @
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
[ Vic @ 20.05.2011. 13:12 ] @
Mozes i A.left=10, ali onda u uslovu mora da je A.left=10, a ne 0.
[ Rapaic Rajko @ 25.05.2011. 21:36 ] @
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
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|