Zamykanie programu !!!!

0

Podczas <font color="green">zamykania</span> programu wyskakuje mi błąd :

<font color="red">Runtime error 216 at 004031FA.</span>

Nie dzieje sie tak zawsze - tylko przy niektórych kompilacjach programu. Ale po takiej kompilacji przy zamykaniu zawsze pokazuje sie ten błąd. Przy pozostałych kompilacjach program zamyka sie bez problemu.

POMOCY
Skąd ten błąd się bierze ???
[???] [???]

0

216 to błąd dostępu do pamięci. Przyczyn tego może być mnóstwo. Np. nie utworzyłeś jakiegoś obiektu i korzystasz z niego, albo odwrotnie: utworzyłeś a nie usunąłeś. Źle ładujesz bibliotekę itp. itd.

0

jescze jedno wyjscie : ty ręcznie w kodzie usuwasz jakiś komponent, a program w onClose automatycznie sam go prójbuje usunąć.

0

No całkiem możliwe że zle zamykam program.
A robię to tak:
Program składa sie z 2 form które sie przełączają miedzy sobą za pomocą buttona i przez kod:

<font color="green">form2.ShowModal;</span>

oraz

<font color="darkblue">form1.Show;
form2.close;</span>

Zamykanie programu jest za pomocą button2 :

<font color="green">procedure TForm1.Button2Click(Sender: TObject);
begin

IF Application.MessageBox(pchar('Zakończyć działanie programu?'),
pchar('bleble'),MB_YESNO +mb_iconstop)=ID_YES
THEN application.Terminate;

end;</span>

Zdarzenie onClose w Object Inspectorze nie jest pod nic podpięte .
Co tu jest zle??
Może powinienem to robić w onClose??

[???] [???] [???]

0

Spruboj zamiast close; napisac application.terminate;

0

Prawdopodobnie program nie zamyka się do końca :(
ponieważ gdy przeDEBUGOWAŁEM plik exe po wyskoczeniu błedu 216 i następnie chciałem usunąć z dysku plik exe to wyskoczył komunikat windowsa:

<font color="red">NIE MOZNA USUNĄĆ.ODMOWA DOSTĘPU.
SPRAWDŻ CZY DYSK NIE JEST CRONIONY PRZED ZAPISEM LUB PEŁNY LUB CZY PLIK NIE JEST AKTUALNIE UŻYWANY.</span>

Bardzo mi zalęzy na rozwiązaniu tego.
A sam chyba nie dam rady. :-( :-(

0

Hmm, sprobuj jeszcze raz przekopiowac wszystkie komponenty na nowa forme, to samo zrob z kodem. Powinno zadzialac.

0

I co to da? Plik dfm będzie taki sam, plik pas będzie taki sam, innych plików w module nie ma. Nie ma w tym przypadku znaczenia cache środowiska delphi, jeśli to runtime error, więc z tej strony nic się nie da zrobić, kopiowanie ma sens tylko w przypadku dziwnych błędów podczas kompilacji. Jeśli program używa zagnieżdżanych (lub pod innym względem skomplikowanych) struktur obiektowych, problem może tkwić w niepirawidłowej kolejności zwalniania pamięci.

[notka dla OooO]
nie pisz if i then dużymi literami, to są słowa kluczowe (pogrubione), powinno się je pisać całe małymi literami. Może się czepiam, ale nie zdziw się jak ktoś ci kiedyś powie, że nie twoje kody źródłowe walą po oczach dziwnymi nawykami. Najlepiej zerknij do porad n/t formatowania kodu, są na http://www.borland.pl

0

form.close używaj tylko dla formy głównej! to nie zamyka programu tylko wyrzuca form2 z pamięci, i tu jest zonk. zamiast form2.close użyj form2.hide. A jak chcesz zupełnie zamknąć aplikację to form1.close. powinno działać.

0

Zrobiłem dwie rzeczy :

<font color="red">1)
Application.terminate;
zamieniłem na
form1.close;</span>
<font color="darkblue">2)
zmieniłem kolejność
form1.Show;
form2.close;
na
form2.close;
form1.show;</span>
To drugie pewnie ma mniejsze znaczenie ale jak na razie Runtime error 216 nie wyskakuje. Ale coś mi mówi że jeszcze się spotkam z runtime error 216. :-/

Bardzo Wam dziękuje za uwagi - były bardzo pomocne !! !! !! !! !! !! !! !!

Serdecznie pozdrawiam [hurra]

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