Lazarus, nic się nie rusza ;)

Lazarus, nic się nie rusza ;)
ZO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

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

Kopiuj
    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ść.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
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ć:

Kopiuj
Application.ProcessMessages;
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
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.

ŁF
  • Rejestracja: dni
  • Ostatnio: dni
0
zombiezombie napisał(a)
Kopiuj
     Sleep(4);

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

ZO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
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.

  • Rejestracja: dni
  • Ostatnio: dni
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.