Image nie chce się przesuwać[Delphi]

0

Witam
Jest taka procedura w TForm1.Button1Click(Sender: TObject);

Procedure rysuj_morze;
var
  X,Y,Z: Byte;
Begin
  Z:=0;
  for X := 1 to koniec do
    for Y := 1 to koniec do
      if Morze[Y,X] then
        Begin
          inc(z); //zwiększa z o 1
          Case z of
          1:
            Begin
              Image2.Left :=  Y*20; //ustawia obrazek nr 2 w jakimś tam miejscu
              Image2.Top  :=  X*20; //ustawia obrazek nr 2 w jakimś tam miejscu
            end;
          2:
            Begin
              Image3.Left :=  Y*20; //ustawia obrazek nr 3 w jakimś tam miejscu
              Image3.Top  :=  X*20; //ustawia obrazek nr3 w jakimś tam miejscu
            end;
          end;
        end;
  MessageBox(0, 'Dalej'  , 'Info' , 0 );
End;

Jest ona wywoływane wiele razy, i za każdym razem rysunki Image są w innym położeniu. Wszystko działa. Niestety wadą tego rozwiązania jest to, że użytkownik musi co kombinacje klikać. Postanowiłem przedostatnią linię kodu zmienić z:

  MessageBox(0, 'Dalej'  , 'Info' , 0 );  //zatrzymaj się i jak już się na patrzysz wciśnij OK

na:

sleep(1000);  //zatrzymaj się na sekundę, aby móc sobie popatrzeć na wynik

Myślałem, że dzięki temu użytkownik będzie mógł patrzeć na zmieniające się kombinacje, a tu wygląda na to, że dopóki procedura TForm1.Button1Click się nie skończy nic się nie narysuje.
Jako, że kombinacji jest dużo to sobie nikt nie popatrzy, jak się one zmieniają. Co robię źle?

0

Może wrzuć w pętli Application.ProcessMessages()?

0

po pierwsze to z zwiększasz konieckoniec razy, a cas'y masz tylko dwa, więc cokolwiek to ma robić na pewno nie robi najlepiej bo pętla (konieckoniec-2) razy nie robi NIC. po drugie to nie rozumiem, tyle się napisałeś a ja nie rozumiem. raz klikałeś na message box, a potem na buttonie, po poprawce klikasz tylko na buttonie...a co właściwie chcesz żeby było ? chcesz klikać czy nie ?

0
snw napisał(a)

po pierwsze to z zwiększasz konieckoniec razy, a cas'y masz tylko dwa, więc cokolwiek to ma robić na pewno nie robi najlepiej bo pętla (konieckoniec-2) razy nie robi NIC

Tak jest dobrze, ja skróciłem ten kod, żeby był czytelniejszy tak naprawdę to tych "cas'ów", jak to nazwałeś :) mam 20. Co do zmiennej koniec to tak jak pisałem wszystko ładnie pasuje i chodzi dopóki nie zmienię na sleep(1000), bo w tej funkcji button funkcja rysuj_morze jest wywoływana ponad 4 biliony razy, no i bez sensu, aby tak klikać, że jest ok i zapoznałeś się z pojedyńczym wynikiem.

po drugie to nie rozumiem, tyle się napisałeś a ja nie rozumiem. raz klikałeś na message box, a potem na buttonie, po poprawce klikasz tylko na buttonie...a co właściwie chcesz żeby było ? chcesz klikać czy nie ?

Chcę kliknąć raz na button i oglądać wyniki. :)

brodny napisał(a)
Application.ProcessMessages()

Tak to działa dzięki bardzo. :)
Dokładnie nie wiem co to za funkcja, ale jej działanie polega na przetworzeniu danych i zwróceniu kontroli nad aplikacją jeśli jest wykonywanych dużo obliczeń.
Dzięki snw za poświęcony czas. Jeszcze raz dzięki brodny, za rozwiązanie problemu.

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