Prosty program nie działa

0

Witam, mam prosty program mający wykonać prostą animację zmniejszenia rozmiaru tak dla picu, tylko dlaczego ten program się nawet nie uruchamia? Proces jest, ok 1000K tylko zajmuje ale nic poza tym, nie wyświetla się.

Unit Tetrys;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
  public
      procedure Start;
      procedure FPS;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Start;
begin
    sleep(1000);
    FPS;
end;

procedure TForm1.FPS;
begin

    if (Width <> 1280) and (Width>2) then
        Width := Width-1;

    Start;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Start;
end;

end.
0

Spróbuj dodać Application.ProcessMessages do FPS bądź Start
(btw, ale wiesz, że ten kod to nieskończona pętla, tak?).

0

Spróbuj dodać Application.ProcessMessages do FPS bądź Start

Oczywiście to co kolega napisał jest bez sensu bo podczas Create forma nie jest wyświetlana. Trzeba przenieść cały proces do timera albo innego zdarzenia oraz zmienić rekurencję na metodę iteracyjną (w czasie wszystkiego wywoływać paint).

0

Sorka nie specjalnie rozumiem. Wiem że to pętla nieskończona, o to chodzi, żeby mi się generowały FPSy, jak w przykładowych grach. W konsoli wystarczyłoby samo while i delay/sleep. Dodanie Application.ProcessMessages; na początku Startu / FPS nic nie dało)

0

Uruchom proces w innym zdarzeniu np po kliknięciu przycisku, a nie w Form Create. Bo to co jest w tym zdarzeniu robi się jeszcze przed "ukazaniem się" okienka czyli nigdy nic nie zobaczysz.

0

Hmm no ok, mam buttonem. Ale teraz mam taki problem że program się zapętla niekontrolowanie, tzn po prostu nie mogę na nim operować. Jest jakiś inny sposób generowania FPS?. Drugim problemem jest brak możliwości uruchamiania programu exekiem, nie reaguje, natomiast jak dam w Borlandzie Run, to uruchamia. Byćmoże 2 problem wynika z pierwszego ale jak rozwiązać pierwszy?

0

Ale teraz mam taki problem że program się zapętla niekontrolowanie, tzn po prostu nie mogę na nim operować.

Skoro cały czas działa jedna pętla to program ją wykonuje a wszystkie komunikaty o wciskanych klawiszach czy ruchu myszy wpierdziela do kolejki, która zostanie wykonana dopiero po skończeniu ww pętli; No ale Twoja się nie kończy więc nie zostaną wykonane; Jeżeli kilka rzeczy musisz zrobić w jednym czasie (tzn. aby działały równorzędnie) skorzystaj z wątków bo po to je wymyślili; Albo pobaw się z wątkami, albo kombinuj z Application.ProcessMessages, który nie zawiesi okna aplikacji, choć nie wiem czy to pomoże; Lepiej skorzystać z wątków; Chyba, że nie ma możliwości sprzężenia go z pętlą to już inna sprawa...

0

To już chyba advanced delphi. Ja potrzebuję jakiegoś prostego rozwiązania, to tylko projekt na informatykę, zwykły wąż. Można to chyba rozwiązać w sposób podobny jak w konsoli.

0

Można to chyba rozwiązać w sposób podobny jak w konsoli.

Zależy co robisz w tej konsoli; Wątki nie są wcale takie trudne jak to się wydaje; A możliwości mają większe niż wstrzymywanie pracy programu;

Ja kiedyś jak jeszcze do TI chodziłem napisałem taki programik do oczekiwania na wciśnięty klawisz; Odliczanie z paskiem postępu (wszystko w konsoli); Podobnie do odliczania po zainstalowaniu windozy; Oczekuje np. 15 sekund - jeżeli się wciśnie klawisz to zostaje coś wykonane, w przeciwnym razie program sam po odliczanym czasie coś tam wykonywał, sam już nie wiem co (ale to tylko test był); Wszystko było oparte na procedurze KeyPressed i pętli oraz Delay na sekundę; Tak samo można to wykorzystać w programowaniu węża, tyle że należałoby sprawdzić jaki klawisz został wciśnięty (także z tym, który wstrzymuję grę i pokazuje menu gry); No ale to był Turbo Pascal w wersji 7, a nie delphi...

Nie wiem co chcesz osiągnąć w delphi, ale można także skorzystać z timera, który będzie odpowiednio rozpoznawał wciśnięty klawisz i na niego reagował; Nie zawiesi Ci programu, a będzie można odpowiednio ustawić interwał timera tak, by podczas wciskania klawisza nie opóźniał jego rozpoznania i reakcji; Chyba prostsze rozwiązanie dla Ciebie skoro chcesz tylko zakuć, zdać, zapomnieć...

0

Nie nie, ja jestem na infie na studiach, nic nie chcę zapominać ;] Tylko mam raptem tydzień czasu wolnego na napisanie tego. Myślałem że w Delphi mogę tak samo zrobić jak napisałeś ale widzę że to tak nie działa nie wiedzieć czemu. Czyli mogę tymi wątkami zrobić ten timer tak?

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