Lazarus, nic się nie rusza ;)

0

Witam.
Mam mały problem w Lazarus'ie, grafika nie chce się poruszać.

    for i:=1 to 30 do
     begin
     Shape1.Left:=Shape1.Left+5;
     Shape1.Top:=Shape1.Top+5;
     Shape1.Width:=Shape1.Width-10;
     Shape1.Height:=Shape1.Height+10;
     Sleep(4);
     Update;
     end;    

A Shape nawet nie drgnie o milimetr. Nie wiem czy to wina środowiska, czy ja coś pomyliłem. Jestem stosunkowo "świeży" w temacie Delphi więc proszę o wyrozumiałość.

0

Teoretycznie kod jest poprawny (pomijając fakt, że jeżeli chcesz tylko poruszać to nie wiem po co modyfikujesz Width i Heigh) Spróbuj przed Sleep dać:

Application.ProcessMessages;
0

Zamiast:
Shape1.Left:=Shape1.Left+5;
Shape1.Top:=Shape1.Top+5;
Shape1.Width:=Shape1.Width-10;
Shape1.Height:=Shape1.Height+10;
możesz napisać:
with Shape1 do SetBounds(Left+5,Top+5,Width-10,Height+10);
Zrobią się wszystkie zmiany naraz.

0
zombiezombie napisał(a)
     Sleep(4);

250 klatek na sekundę? masz dobre oko...

0

@kAzek, Width i Heigh zmodyfikowałem na końcu w akcji "ostatecznej desperacji", żeby zobaczyć jaki kol wiek ruch w okienku. Tak samo zmiana położenia była trochę inna w oryginale, ale jak nie wychodziło zacząłem testować, kombinować na "a może się teraz ruszy" ;)
Application.ProcessMessages; Nie pomogło Shape ani drgnie.
@ŁF, nad płynnością i efektywnością popracuje jak zacznie się coś dziać.
Jeszcze jakieś pomysły? Ja przeglądam lazarusowe wiki, może tam natrafię na pomocy tip.

0

u mnie działa. zobacz w załączniku

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