Visual FoxPro a konec aplikace

Poměrně stálým zástupcem na naší HotLine je následující dotaz:
Proč mi aplikace, která chodí pod vývojovým prostředím normálně, v Runtime jen problikne ?
Ve FoxBase se používal k zastavení programu a vyčkání na vstupy obsluhy cyklus DO WHILE lKonec… ENDDO s příkazem READ, ve FoxPro 2.x bezobjektový READ. Ve Visual FoxPro se ke stejným účelům používá příkaz READ EVENTS (viz. Help). V hlavním programu aplikace (po počátečním nastavení hodnot a aktivaci menu nebo formuláře) na místo , kde chci umožnit uživateli vstup ( z menu přes formulář), umístím tento příkaz a aplikace počká ), dokud uživatel nebude chít skončit. Nesmím zapomenout do objektu, který zajišťuje ukončení (tlačítko, položka menu), vložit opačný příkaz CLEAR EVENTS. Základní schéma hlavního programu, kterým se aplikace spouští vypadá tedy takto:

* MAIN.PRG
DO <program pro nastavení prostředí>
DO MAIN.MPR && Instalace menu, ze kterého se volají formuláře příkazem DO FORM
            && Menu také obsahuje volbu s příkazem CLEAR EVENTS
READ EVENTS

S předchozím dotazem tak trochu souvisejí i následující dva:
Proč mi nejde ukončit aplikace, když klepnu na tlačítko Konec, které vyvolá Thisform.Release()
Pokud se nejedná o chybu kódu , jde s největší pravděpodobností o existující odkaz na některý objekt na formuláři *). Obecně platí: pokud zavedu odkaz pro (dlouhý) název objektu (např. oGridText1 = Thisform.Grid1.Column1.Text1) **), musím tento odkaz odstranit před pokusem o ukončení formuláře (v tomto případě RELEASE oGridText1).

Proč nejde ukončit aplikace přes křížek v pravém horním rohu okan? Objevuje se místo toho okno „Cannot Quit Visual FoxPro “.
Použijte příkaz ON SHUTDOWN <příkaz> . kde příkaz je volání procedury, která umožní uložit data, korektně uzavře soubory a provede QUIT; je dobrým zvykem zeptat se, jestli obsluha opravdu chce skončit ***).

Martin Růžička

* Pozn. přepis.: Jsou i jiné důvody proč nejde uzavřít formulář, další je v článku Zavěšený (hung) formulář a co s tím.
** Pozn. přepis.: Zkuste ten řádek vložit do metody Init() formuláře. Ještě nezapomeňte proměnnou oGridText1 deklarovat jako PUBLIC.
*** Pozn. přepis.: Pokud je v té době aktivní modální formulář, pak jej musíte uzavřít (no aspoň je to zvykem ve Windows).
Pokud ne, pak následuje to co je uvedeno výše.