powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ну помогите, блин, отловить событие OnShutDown, пожалуйста
12 сообщений из 12, страница 1 из 1
Ну помогите, блин, отловить событие OnShutDown, пожалуйста
    #32178985
BMP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BMP
Гость
Проблема достала.
В проекте нужно дописать массу кода на завершение работы программы, но вся проблема в том, что не получается найти это самое место для кода на событие OnShutdown.
Все из-за того, что когда проект создавался, то по неопытности его создали при помощи визарда. К данному моменту уже многое написано и не хотелось бы перетаскивать все на новую базу(голый проект), так как многое было привязано к созданному визардом. Помогите отыскать это проклятое место для обработки OnShutDown.
При нажатии на кнопку с крестиком в правом верхнем углу экрана выскакивает сообщение типа "Are you realy want to quit?". Начал искать эту строку и нашел только в директории, где лежит Фокспро. Решил дописать свой код прямо туда. Пробую компилировать проект - фокс говорит, что этот файл не является объектным. Посоветуйте, что делать.
...
Рейтинг: 0 / 0
Ну помогите, блин, отловить событие OnShutDown, пожалуйста
    #32178993
Alex Antipenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На ON SHUTDOWN DO <name proc>.
Вам нужно искать процедуру с таким именем. Она может бить в библиотеке (команда SET PROCEDURE TO <name file>) или в отдельном prg(fxp) файле.
Привожу пример:

Начало програмы:

Код: plaintext
ON SHUTDOWN SHUTDOWN()


В этой же проге в конце:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
PROC shutdown
DO FORM msg_form WITH 'ВЫЙТИ ИЗ ПРОГРАМЫ' TO pnRetDial
IF pnRetDial= 2 
 pnRetDial= 0 
 RETURN 
ENDIF
ON ERROR
ON SHUTDOWN
SET PATH TO
SET SYSMENU TO DEFAULT
SET DELETED OFF
CLEAR EVENTS
RETU 
...
Рейтинг: 0 / 0
Ну помогите, блин, отловить событие OnShutDown, пожалуйста
    #32178994
Alex Antipenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можеш посмотреть
http://nsvisual.com/ph/read.php3?f=5&pnn=1&i=54973&t=54973
...
Рейтинг: 0 / 0
Ну помогите, блин, отловить событие OnShutDown, пожалуйста
    #32179000
BMP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BMP
Гость
Вот все что есть у меня в главной программе:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
* REST_APP.PRG

* This file is a generated, framework-enabling component
* created by APPBUILDER 
* (c) Microsoft Corporation


* Framework-generated application startup program
* for D:\REST\REST Project

#INCLUDE [..\REST_APP.H]
IF TYPE([APP_GLOBAL.Class]) =  "C"  AND ;
   UPPER(APP_GLOBAL.Class) == UPPER(APP_CLASSNAME)
   MESSAGEBOX(APP_ALREADY_RUNNING_LOC, 48 , ;
              APP_GLOBAL.cCaption )
   IF VARTYPE(APP_GLOBAL.oFrame) =  "O" 
      APP_GLOBAL.oFrame.Show()
   ENDIF              
   RETURN
   
ENDIF   

RELEASE APP_GLOBAL
PUBLIC  APP_GLOBAL

LOCAL lcLastSetTalk, llAppRan, lnSeconds, loSplash
LOCAL ARRAY laCheck[ 1 ]

lcLastSetTalk=SET( "TALK" )
loSplash = .NULL.
SET TALK OFF

#IFDEF APP_SPLASHCLASS

   IF NOT EMPTY(APP_SPLASHCLASS)
      loSplash = NEWOBJECT(APP_SPLASHCLASS, APP_SPLASHCLASSLIB)
      IF VARTYPE(loSplash) =  "O"    
         lnSeconds = SECONDS()
         loSplash.Show()
      ENDIF
   ENDIF                                

#ENDIF

APP_GLOBAL = NEWOBJECT(APP_CLASSNAME, APP_CLASSLIB)

IF VARTYPE(APP_GLOBAL) =  "O"  ;
      AND ACLASS(laCheck,APP_GLOBAL) >  0  AND ;
      ASCAN(laCheck,UPPER(APP_SUPERCLASS)) >  0 

   APP_GLOBAL.cReference =[APP_GLOBAL]
   APP_GLOBAL.cFormMediatorName = APP_MEDIATOR_NAME

   #IFDEF APP_CD
      APP_CD
   #ENDIF
      
   #IFDEF APP_PATH
      APP_PATH
   #ENDIF   
   
   #IFDEF APP_INITIALIZE
       APP_INITIALIZE
   #ENDIF
   
   IF VARTYPE(loSplash) =  "O" 
   
      IF SECONDS() < lnSeconds + APP_SPLASHDELAY
         =INKEY(APP_SPLASHDELAY-(SECONDS()-lnSeconds), "MH" )
      ENDIF

      loSplash.Release()
      loSplash = .NULL.

   ENDIF
   
   RELEASE laCheck, loSplash, lnSeconds
           
   IF NOT APP_GLOBAL.Show()

      IF TYPE([APP_GLOBAL.Name]) =  "C" 
         MESSAGEBOX(APP_CANNOT_RUN_LOC, 16 , ;
                 APP_GLOBAL.cCaption )
         APP_GLOBAL.Release()
      ELSE
         MESSAGEBOX(APP_CANNOT_RUN_LOC, 16 )
      ENDIF

   ELSE
      llAppRan = .T.
   ENDIF
   
     
   IF TYPE([APP_GLOBAL.lReadEvents]) =  "L" 
   
      IF APP_GLOBAL.lReadEvents
         * the Release() method was not used
         * but we've somehow gotten out of READ EVENTS...
         APP_GLOBAL.Release()
      ENDIF
   ELSE
      RELEASE APP_GLOBAL
   ENDIF

ELSE

   MESSAGEBOX(APP_WRONG_SUPERCLASS_LOC, 16 )
   RELEASE APP_GLOBAL

ENDIF

IF lcLastSetTalk== "ON" 
   SET TALK ON
ELSE
   SET TALK OFF
ENDIF

IF TYPE([APP_GLOBAL]) =  "O" 
    non-read events app
   RETURN APP_GLOBAL
ELSE
   RETURN llAppRan
ENDIF 


Если искать текст "SHUTDOWN" в файлах проекта, в результате такой текст есть только в исполняемой *.ехе. Ничего не понимаю....
...
Рейтинг: 0 / 0
Ну помогите, блин, отловить событие OnShutDown, пожалуйста
    #32179014
Alex Antipenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да Визард постарался, лучше уж ручками. Ну да ладно.

Посмотри #INCLUDE [..\REST_APP.H]
Найди "Are you realy want to quit?".
Возможно это значение константа (DEFINE). Потом по значению константы найдёшь, где он находится.
...
Рейтинг: 0 / 0
Ну помогите, блин, отловить событие OnShutDown, пожалуйста
    #32179017
BMP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BMP
Гость
Нет, к сожалению там ничего подобного нету, только следующее:

[/src]
#DEFINE APP_SUPERCLASS "_application"

* developer can change this one
* to use a different global reference
* if desired -- a BUILD ALL/RECOMPILE
* is required afterwards to synch up
* references in generated menus and PRGs.
#DEFINE APP_GLOBAL goApp

* This one indicates the member name of the object
* placed on "framework-enabled" forms:
#DEFINE APP_MEDIATOR_NAME "app_mediator"

* developer can change these to a different subclass
* of APP_SUPERCLASS if desired:
#DEFINE APP_CLASSLIB "REST_APP.VCX"
#DEFINE APP_CLASSNAME "app_application"

* the splash class can be anything you want:
* #DEFINE APP_SPLASHCLASS "app_splash"
#DEFINE APP_SPLASHCLASSLIB "REST_APP.VCX"
* how long should the splash screen stay up if
* no key is pressed and if the app object initializes
* too quickly? (this figure is in seconds)
#DEFINE APP_SPLASHDELAY 3

* the following are localization strings for the wrapper program:
#DEFINE APP_CANNOT_RUN_LOC "Application cannot run."
#DEFINE APP_ALREADY_RUNNING_LOC "Application already running."
#DEFINE APP_WRONG_SUPERCLASS_LOC "Sorry -- this application must instantiate "+ CHR(13)+ ;
"an object that descends from "+APP_SUPERCLASS+"."

* this is a localization string for the menus:
#DEFINE APP_FEATURE_NOT_AVAILABLE_LOC "Feature not available."

* this one is a hook in the startup program, not
* needed by the framework:
* #DEFINE APP_INITIALIZE *<Initialize>*

* strictly speaking the 6.0 framework does not
* need the following, but the 5.0 template apps may,
* if they are adapted for the new framework:
* #DEFINE APP_CD *<CD>*
* #DEFINE APP_PATH *<PATH>*
[/src]

Такую строку я нашел в директории, где установлен Фокс, в файле _framewk.h

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
* _framewk.h

***********************************************************
* localization strings, constants, 
* and tunable expressions for _framewk.vcx,
* framework-enabling header file for global template classes

***********************************************************

#DEFINE APP_READY_TO_SHUTDOWN_LOC      "Are you sure you want to quit?" 



Беру ищу строку APP_READY_TO_SHUTDOWN_LOC. И опять же нахожу ее только в исполняемом *.ехе файле.
Кстати почему в нем (в исполняемом *.ехе) код совсем не машинный?
...
Рейтинг: 0 / 0
Ну помогите, блин, отловить событие OnShutDown, пожалуйста
    #32179028
Alex Antipenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поищи переменную в REST_APP.VCX. Там находится главнный класс приложения. Он запускается на пиполнение.
...
Рейтинг: 0 / 0
Ну помогите, блин, отловить событие OnShutDown, пожалуйста
    #32179035
Alex Antipenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется, нашёл.
Посмотри в каталог VFP7\WIZARDS\ там находится библиотека класов _framewk.vct. В описании класса _application есть метод onshutdown.
Измини его и посмотри.
...
Рейтинг: 0 / 0
Ну помогите, блин, отловить событие OnShutDown, пожалуйста
    #32179038
BMP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BMP
Гость
СПАСИБО БОЛЬШОЕ, Alex Antipenko
Я уже исправлял этот файл, но только не из под Фокса, т.к. не мог найти
ы описании класса _application метод onshutdown. А нашел это место при помощи поиска текста из под DOS Navigatora, из под которого все и менял.
После чего компилю проект в Фоксе - он говорит, что файл _framewk.vct не является объектным. :) Еще раз большое спасибо. Удачи.
...
Рейтинг: 0 / 0
Ну помогите, блин, отловить событие OnShutDown, пожалуйста
    #32182004
ЗВН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PUBLIC goApp
goApp=CREATEOBJECT("cApplication")
...
...
...

FUNCTION ShutDown
IF TYPE("goApp")=="O" AND NOT ISNULL(goApp)


*** МОЖНО НАСОВАТЬ ЧЕ ХОЧЕШЬ!!!!

RETURN goApp.OnShutDown() && Собщение "Хотите выйти ?"
ENDIF
Cleanup()
QUIT
ENDFUNC

Это строки из *.prg которая "set main" в проекте постоенном построителем
т.е. как я демаю OnShutDown() метод обекта "aplication"
скорее всего зашито очень глубоко (appwiz, _framewk.vcx и т.п )
...
Рейтинг: 0 / 0
Ну помогите, блин, отловить событие OnShutDown, пожалуйста
    #32182032
ЗВН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде Нашел !!!
appwiz.vcx
метод OnShutDown

попробуй засунуть свой messagebox


#DEFINE EXIT_LOC "Are you sure you want to exit?"
IF MESSAGEBOX(EXIT_LOC,36,_screen.Caption)=6
QUIT
ENDIF
...
Рейтинг: 0 / 0
Ну помогите, блин, отловить событие OnShutDown, пожалуйста
    #32182176
Samir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_FrameWk.h - здесь находится строка "Are you sure you want to quit?"

Процедура On ShutDonw находится здесь

Class _FrameWk
Object _Application
Procedure _SetEnvironment
Procedure _RestoreEnvironment
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ну помогите, блин, отловить событие OnShutDown, пожалуйста
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]