[Delphi] Zakończenie wątku z wątku :)

0

Cześć!
Mam takiego problema :P. Robię sobie grę i po stracie ostatniego życia ma nastąpić zniszczenie wątku. Operacja zniszczenia, a dokładniej zakończenia wątku (Terminate) działa ładnie ale spod procedur Formy (ja mam w OnCloseQuery). W OnClose Mam taki kod, i on działa, gdy zostanie wywołany przez Formę:
(Engine - mój wątek)

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
Engine.Terminate;
Form2.Prepare;
Form2.AutoSize := True;
Form2.Button1.Left := ((Form2.Width - Form2.Button1.Width) div 2);
Form2.ShowModal;

CanClose := False;
end;

W procedurce Form2.Prepare następuje tylko w czasie błędu zakończenie Aplikacji (Application.Terminate). No dobrze, gierka działa OK, dopóki człek nie straci wszystkich żyć (wyłączenie Form1'y następuje OK gdy użytkownik to zrobi sam... po stracie wszystkich żyć ma to nastąpić programowo i tu zaczynają się schody..). Moja procedurka Execute mojego wątku:

{Lives jest to zmienna typu Byte, życia to są 3, 2, 1, 0, gdy w życiach jest 255 ma nastąpić CloseQuery}
procedure TBall.Execute;
begin
FreeOnTerminate := False;
while not (Terminated) do
begin

Sleep(1);
Synchronize(Dzialaj);
Form1.Label1.Caption := IntToStr(Lives);
if (Lives = 255) or (Lives = 254) then
begin
Break;

end;
end;
YYA := False;
Form1.CloseQuery;
{Destroy; }
{Free; }
end;

Gdy puszczę taki kod... Wątek się zamyka, odpala Form2, ale gdy kliknę na Button'a na Form2 (ma wyłączyć całą aplikację) następuje jakiś błąd (klasy EOSError). Próbowałem dawać po Form1.CloseQuery, Destroy i Free, żadnych komunikatów o błędach wtedy nie było, ale programu nie dało się zamknąć do tego Debugger Delphi zacinał się, i trza było wyłączyć Delphi niebezpiecznie. Czy ktoś zrozumiał o co mi chodzi?? :):):).
STRESZCZENIE: jak wyłączyć wątek, gdy w nim nastąpi jakaś określona procedura, Zmienna Lives będzie miała 255, lub 254??
Z góry wielkie dzięki za podpowiedzi... :):):) PAPA

0

Spróbuj może dać form1.close :)

0

Witaj!
Chodzi mi o to żeby on odpalał Form1.CloseQuery, tam są dla niego wszystkie instrukcje. Mogę oczywiście zmienić, aby było to w jakieś innej procedurze, ale to by nie miało sensu, a wynik, byłby taki sam...

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