powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление окон при закрытии приложения
48 сообщений из 48, показаны все 2 страниц
Удаление окон при закрытии приложения
    #39339305
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня всем!

В случае возникновения ошибки мой обработчик предлагает принять решение продолжить или выйти из приложения.
В последнем случае clear events и запускается процедура закрытия.

Один из возможных случаев - когда из формы открыто окно с помощью Browse и, например, нажатие на кнопки навигации вызывает ошибку 1924 "Activeform is not an object"
В принципе, она может быть отловлена в обработчике с мессаджем "Закройте окно!" , но ведь, вероятно, могут возникнуть и другие ошибки при открытом окне.

Вопрос заключается в том, что не могу закрыть это окно в своей процедуре ExitProcedure

Код такой:

Код: sql
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.
PROCEDURE ExitProcedure
LOCAL lnFormCount, lnNum, loForm, lcwin

** Здесь явно задаю окно, которое специально открываю, что бы добиться результата. Но в каждой форме может быть такое окно, и *их надо как-то отлавливать.

IF WEXIST('Список банков') 
	RELEASE window 'Список банков'
ENDIF

** для окон вообще был придуман такой код

if typy(_screen.Activeform) != "O" 
        lcwin = WTITLE()
        RELEASE WINDOW &lcwin

** но эти коды не работают

* далее код для закрытия открытых форм

	lnFormCount	= _screen.formcount
	for lnNum=lnFormCount to 1 step -1
		try
			loForm = _screen.forms(lnNum)
		catch
			loForm = .f.
		endtry
		if vartype(loForm)="O"
			loForm.visible = .f.
			loForm.release()
		endif
	endfor

goApp.Cleanup()

CLOSE DATA ALL
CLEAR ALL
RELEASE ALL extended
SET SYSMENU TO DEFAULT
ON ERROR
ON shutdown
SET CLASSLIB TO
SET PATH TO
CLEAR DLLS

QUIT



Кроме того, в метод форм release поместил такой код:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
IF thisform.isedit
	if(MESSAGEBOX('Открыта форма ' + this.Caption + CHR(13) + 'Могут быть потеряны данные. Все равно закрыть?' ;
		 + CHR(13) + CHR(13) + ' YES - продолжить' + CHR(13) + 'NO - закрыть форму, затем выйти из приложения самостоятельно',4+48))=7
		 
		RETURN
		READ events
	ENDIF
ENDIF



Этот код я даже проверить пока не смог.

Прошу помощи и советов по поводу процедуры закрытия вообще, и как закрыть окно в частности

Заранее спасибо
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39339315
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Browse никто не использует в готовом приложении. Поэтому сложно что-то подсказать.

Давай пример в виде рабочего кода. Маленький проект с демонстрацией проблемы сделай и выложи сюда. Может найдется решение.
Но лучше замени Browse на форму с гридом.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39339356
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,


В приложении одна только рабочая форма в "Справочники" - "Банки"
На ней и тестирую

Ошибка возникает, когда при открытом Browse окне нажать кнопки навигации, выбор Отмена должен, по идее, привести к выходу из приложения, но не приводит.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39339518
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что я вижу запустив main.prg

Работает только меню "выход" и выход "крестиком" окна.

И я просил сделать простой пример, демонстрирующий проблему, а не весь твой рабочий проект выкладывать.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39339656
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Нет, так не должно быть, service.app запусти.
Там в проекте одна только форма есть, сделать простой пример - просто еще раз все тоже переписать.

Ну попробую переписать.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39339709
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А толку мне от твоего service.app ? Он запускается, меню с кнопками появляется, только до его кода мне никак не добраться.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39339787
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Ну вот такой вариант.

При запуске main появится форма и маленький тулбар с навигацией и кнопкой "Browse". Кнопка Browse вызывает просмотр таблицы.
Предполагается, что пользователь обязательно нажмет на кнопку навигации при открытой таблице и вызовет ошибку 1924 "Activeform is not an object" .

Я предполагал сделать возможность выбора - или продолжить и не обращать внимания, или выйти из приложения совсем. Ну, не только для этого случая, но и в последствии.

Так вот, при выборе "Отмена" должна работать процедура ExitProcedure, а закрыть окно в ней я не могу, даже если явным образом на это окно указываю.

Можно ли как-то отследить открытое такое окно и закрыть его в коде?
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340094
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убери все лишнее из ExitProcedure. Так отлично работает
Код: sql
1.
2.
3.
4.
PROCEDURE ExitProcedure
ON ERROR
ON shutdown
QUIT
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340112
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Убрал, как-то все равно не работает (
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340122
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, у меня работает. Скомпилировал exe - тоже работает.


Запускаю, нажимаю на кнопку, выходит окно browse, жму крест, все закрывается.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340132
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Так получается, что только если в процедуре обработки ошибок вместо CLEAR EVENTS сослаться непосредственно на процедуру ExitProcedure() - тогда все работает.


Хотя после READ EVENTS в головной main сразу та самая ExitProcedure() и стоит.

Спасибо большое за помощь, Dima T.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340135
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По хорошему делается так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ON SHUTDOWN DO ExitProcedure
ON ERROR do SolutionErrHandle with ERROR(),PROGRAM(),LINENO()
...

READ events
* тут действия при выходе
ON shutdown
ON ERROR
QUIT


PROCEDURE ExitProcedure
CLEAR events
ON shutdown
return


Переделал так, у меня тоже перестало выходить.

В твое BROWSE надо добавить ключ NOWAIT
Код: sql
1.
2.
3.
4.
5.
	BROWSE ;
		FIELDS ;
			id, ;
			cname ;
		NOEDIT NOAPPEND NODELE NOWAIT TITLE 'Список банков' PREFERENCE wbrw_bank
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340139
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Не, не крест надо жать )

Нужно при открытом окне с таблицей жать на кнопки навигации (т.е. предполагаем, что пользователь когда-нибудь так и сделает) , тогда выйдет сообщение об ошибке, в этом сообщении выбор пользователю - ОК - продолжать и не обращать внимание, и ОТМЕНА - выйти совсем из приложения.

Вот эта отмена и не работала )
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340143
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TПо хорошему делается так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ON SHUTDOWN DO ExitProcedure
ON ERROR do SolutionErrHandle with ERROR(),PROGRAM(),LINENO()
...

READ events
* тут действия при выходе
ON shutdown
ON ERROR
QUIT


PROCEDURE ExitProcedure
CLEAR events
ON shutdown
return


Переделал так, у меня тоже перестало выходить.

В твое BROWSE надо добавить ключ NOWAIT
Код: sql
1.
2.
3.
4.
5.
	BROWSE ;
		FIELDS ;
			id, ;
			cname ;
		NOEDIT NOAPPEND NODELE NOWAIT TITLE 'Список банков' PREFERENCE wbrw_bank



В чем же тогда смысл процедуры ExitProcedure ?
Может просто CLEAR EVENTS ставить да и все, все равно получатся весь набор команд по выходу после READ EVENTS стоит.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340145
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отмену закрытия формы надо прописывать в QueryUnload() формы
Код: sql
1.
2.
3.
if MESSAGEBOX("Выйти?", 4, "ВЫХОД") != 6
	nodefault
endif
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340148
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnВ чем же тогда смысл процедуры ExitProcedure ?
Может просто CLEAR EVENTS ставить да и все, все равно получатся весь набор команд по выходу после READ EVENTS стоит.
Смысл ExitProcedure вызвать CLEAR EVENTS при нажатии на крестик закрытия приложения.
Дальше должен работать код после READ EVENTS
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340236
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Закрытие приложения "по-крестику" запретил _screen.Closable=.f.

В моем случае добавлять NOWAIT в BROWSE будет не совсем правильно, без NOWAIT окно будет закрываться сразу после любого клика вне этого окна, что правильно.

Таким образом, процедура примет вид:
Код: sql
1.
2.
3.
4.
5.
6.
PROCEDURE ExitProcedure

goApp.Cleanup() && восстановление системных тулбаров и т.д.
ON ERROR
ON shutdown
QUIT



а в главном файле
Код: sql
1.
2.
3.
4.
...
READ EVENTS

Exitprocedure()



Все работает.

Но кажется, что как-то.. неизящно, что ли
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340284
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnВсе работает.

Но кажется, что как-то.. неизящно, что ли
Да. Через жопу, но работает.

DmitryKnЗакрытие приложения "по-крестику" запретил _screen.Closable=.f.
Надо не запрещать, а делать нормально. BROWSE это наследие FoxPro 2.x for DOS. Забыть и не пользовать.

Я же тебе написал что код для выхода должен быть после READ events. причем там не надо никаких лишних движений, т.к. QUIT вызовет деструкторы всех объектов, завершит процесс и виндовс почистит все что недочищено.
Заморачиваться надо только на тему несохраненных изменений 19851943
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340322
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Этот проект я сделал в прошлом году, и тогда немало советов и помощи получил, в том числе и от тебя, за что много и искренне благодарен. Так вот, будучи новичком и ламером, делал я его с формой верхнего уровня, а все формы с гридом.

Теперь я решил проект (который через жопу, но работал) усовершенствовать, сделать его в главном окне (что стоило мне больших усилий) и сознательно в некоторых местах отказался от грида, просто мне визуально, эстетически, если угодно, больше нравится BROWSE. Мне казалось - это близко к совершенству, а ты - вчерашний день, забыть...

Я на это неделю отпуска убил, а теперь выходит, что все это напрасно я затеял, так что ли )))

Чем грид все-таки лучше, чем BROWSE, если просто нужно на список глянуть?
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340454
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня только глянуть, завтра еще что-то добавить захочешь, например цветом что-то выделить или кнопки добавить.

Если уж решил писать, то книжку почитай какую-нибудь.
Неплохо написана Менахем Базиян "Использование Visual FoxPro 6" , я по ней VFP осваивал.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39340913
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,


У меня В.Клепини и Т.Агафонова "VFP 9.0." и , кроме того, Мусина, "VFP 9.0".
Не хватает только систематизированных знаний, например, образования по профилю, и систематических же занятий ), а так все есть.

Спасибо большое, Dima Т, за помощь, буду переосмысливать проект.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341059
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKn,
Browse хорош при отладке. Посмотреть что и как)
А так, просто примите пока на веру слова Dima T

И вообще, если что то не ясно, примите пока просто на веру, все что вам тут говорил Dima T )))

О книгах...
Посмотрите в фоксклубе, много статей, в том числе о построении приложения.
Прочтите все Максимова. Явно не будет лишним.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341116
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asdorDmitryKn,
...
А так, просто примите пока на веру слова Dima T
...


Это без всяких сомнений, непременно и абсолютно серьезно.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341168
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnЭто без всяких сомнений, непременно и абсолютно серьезно.

... и глупо, только годы напрасно потеряете.
Сомнительно, что лет за десять на советах десятилетней давности вы сумеете создать хоть что-то путное.
К сожалению, ФоксПро умер лет десять назад, и этим все сказано.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341442
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TОтмену закрытия формы надо прописывать в QueryUnload() формы
Код: sql
1.
2.
3.
if MESSAGEBOX("Выйти?", 4, "ВЫХОД") != 6
	nodefault
endif



Если было открыто n окон и одно из них в режиме редактирования, но неактивно, т.е. не очевидно, и пользователь внезапно нажал "крестик" и подтвердил свое желание выйти, забыв о существовании формы в режиме редактирования, то какой код остановит выход из приложения, конечно, но уже запустятся всякие процессы закрытия, повылазят тулбары и системные окна и т.д. и, в конечном счете все сведется к саспендигнореканселу с последующим диспетчером задач.

Откат к исходному состоянию - даже боюсь думать, где там разбираться.

Проще, наверное, в ExitProcedure проверить, существуют ли редактируемые окна и сообщить об этом пользователю.
Код: sql
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.
PROCEDURE ExitProcedure	
LOCAL i, lnFormCount, lnNum, loForm
i=0

lnFormCount	= _screen.formcount
		for lnNum=lnFormCount to 1 step -1
			try
				loForm = _screen.forms(lnNum)
			catch
				loForm = .f.
			endtry
			if vartype(loForm)="O" AND UPPER(loForm.BaseClass) = "FORM"
				IF loform.isedit = .t.
					i = i + 1
				ENDIF
			ENDIF
		ENDFOR
		

IF MESSAGEBOX('Вы действительно хотите выйти?',4+48+256,'Закрытие приложения') = 6
	IF i != 0
		IF MESSAGEBOX('Есть открытые в режиме редактирования окона ' + '(' + ALLTRIM(STR(i)) + '). Несохраненные данные могут быть потеряны' + chr(13) + ;
			'Все равно выйти?' + CHR(13) + CHR(13) + 'ДА - выйти из приложения, НЕТ - вернуться',4+48+256,'Закрытие приложения') = 6
	
			ON shutdown
			CLEAR EVENTS
			return
		ELSE
			RETURN
			READ events
		ENDIF
	ENDIF
ENDIF

ENDPROC
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341446
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKn,
авторЕсли было открыто n окон и одно из них в режиме редактирования, но неактивно, т.е. не очевидно, и пользователь внезапно нажал "крестик" и подтвердил свое желание выйти, забыв о существовании формы в режиме редактирования, то какой код остановит выход из приложения, конечно, но уже запустятся всякие процессы закрытия, повылазят тулбары и системные окна и т.д. и, в конечном счете все сведется к саспендигнореканселу с последующим диспетчером задач.

Откат к исходному состоянию - даже боюсь думать, где там разбираться.


Просто сначала закройте все открытые окна.
Сама форма, должна знать в каком она состоянии, и в случае нужды, задать вопрос.
После удачного закрытия всех окон, можно продолжать уничтожать остальное.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341452
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asdorDmitryKn,

Просто сначала закройте все открытые окна.
Сама форма, должна знать в каком она состоянии, и в случае нужды, задать вопрос.
После удачного закрытия всех окон, можно продолжать уничтожать остальное.

Ну или так
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341460
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdor,
Не или)))
Только сам объект знает, как лучше вести себя при уничтожении (и не толькл).
Не надо лезть в них.
Есть однотипные события, действия... дальше совсем банально)
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341543
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Процедура закрытия
Код: sql
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.
PROCEDURE ExitProcedure	
LOCAL lnFormCount, lnNum, loForm	

IF MESSAGEBOX('Вы действительно хотите выйти?',4+48+256,'Закрытие приложения') = 6
	lnFormCount	= _screen.formcount
		FOR	 lnNum=lnFormCount to 1 step -1
			try
				loForm = _screen.forms(lnNum)
			catch
				loForm = .f.
			endtry
			if vartype(loForm)="O" AND UPPER(loForm.BaseClass) = "FORM"
*				loForm.visible = .f.
				loForm.release()
			endif
			
		ENDFOR	
	
			ON shutdown
			CLEAR EVENTS
			return
ELSE
			RETURN
			READ events
		
ENDIF

ENDPROC



Последовательно закрывает все формы.
В QueryUnload формы:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
IF this.isedit
	if(MESSAGEBOX('Открыта форма ' + this.Caption + CHR(13) + 'Могут быть потеряны данные. Все равно выйти?' ;
		 + CHR(13) + CHR(13) + 'ДА - продолжить' + CHR(13) + 'НЕТ - вернуться к форме',4+48+256))=7

	nodefault

	ENDIF
ENDIF



По идее, при попытке закрыть приложение, должны закрыться последовательно все формы, при закрытии формы должен быть проверен код QueryUnload и выдан запрос.
Однако при нажатии на "крестик" приложения при открытой на редактирование форме, просто все закрывает и все, как если бы никакого кода в QueryUnload нету.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341561
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnВ QueryUnload формы:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
IF this.isedit
	if(MESSAGEBOX('Открыта форма ' + this.Caption + CHR(13) + 'Могут быть потеряны данные. Все равно выйти?' ;
		 + CHR(13) + CHR(13) + 'ДА - продолжить' + CHR(13) + 'НЕТ - вернуться к форме',4+48+256))=7

	nodefault

	ENDIF
ENDIF



По идее, при попытке закрыть приложение, должны закрыться последовательно все формы, при закрытии формы должен быть проверен код QueryUnload и выдан запрос.
Однако при нажатии на "крестик" приложения при открытой на редактирование форме, просто все закрывает и все, как если бы никакого кода в QueryUnload нету.
Скорее всего this.isedit = .F.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341564
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

isedit=.t. присваивается, когда форму открываем на редактирование, тут правильно.

Более того, если при редактировании формы не указывать closable=.f., то код в QueryUnload срабатывает, если саму открытую форму попытаться закрыть "по-крестику". Именно форму, а не само приложение.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341567
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Dima T]DmitryKnВ QueryUnload формы:

...
Скорее всего this.isedit = .F.

И, если как я ранее проверку открытых форм делал - считается количество открытых форм, т.е. isedit присутствует очевидно.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341571
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnБолее того, если при редактировании формы не указывать closable=.f., то код в QueryUnload срабатывает, если саму открытую форму попытаться закрыть "по-крестику". Именно форму, а не само приложение.
Зачем указывать closable=.f. ? Ткнет пользователь в крестик формы - выйдет сообщение. Зачем закрытие формы блокировать?
Возможно QueryUnload не отрабатывает из-за closable=.f., не проверял.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341574
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TDmitryKnБолее того, если при редактировании формы не указывать closable=.f., то код в QueryUnload срабатывает, если саму открытую форму попытаться закрыть "по-крестику". Именно форму, а не само приложение.
Зачем указывать closable=.f. ? Ткнет пользователь в крестик формы - выйдет сообщение. Зачем закрытие формы блокировать?
Возможно QueryUnload не отрабатывает из-за closable=.f., не проверял.

closable = .f. указывается в методе toedit на клик кнопки "Edit", т.е. в момент начала редактирования данных на форме, и устанавливается в closable = .t. в методе save, предотвращая таким образом закрытие формы во время редактирования. Но формы, а не проекта.

Я попробовал исключить closable из кода, это ничего не меняет, не в этом причина.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341578
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А какова будет вообще последовательность в процедуре 19859075 ?

Может FOR ... ENDFOR не успевает отработать?
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341582
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я проверил:
при closable = .f. и закрытии окна фокса крестиком - QueryUnload() НЕ вызывается, просто закрывается форма.
при closable = .t. QueryUnload() срабатывает хоть на крестик окна фокса, хоть на крестик формы.

поставь первой строкой в QueryUnload()
Код: sql
1.
set step on


и посмотри отладчиком что там происходит.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341583
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnА какова будет вообще последовательность в процедуре 19859075 ?

Может FOR ... ENDFOR не успевает отработать?
Там хуже все, при закрытии таким способом ссылки на активную форму остаются и она не до конца уничтожается, поэтому надо прикручивать таймер, который за первый такт выполнит цикл, а вторым тактом все остальное. Изврат вобщем нужен.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341587
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИзврат вобщем нужен.

Без изврата никак?
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341589
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TDmitryKnА какова будет вообще последовательность в процедуре 19859075 ?

Может FOR ... ENDFOR не успевает отработать?
Там хуже все, при закрытии таким способом ссылки на активную форму остаются и она не до конца уничтожается, поэтому надо прикручивать таймер, который за первый такт выполнит цикл, а вторым тактом все остальное. Изврат вобщем нужен.

П-фф...Так может все-таки проверка на наличие открытых форм не так уж плоха? Или изврат все-таки обязателен для нормального приложения? ))
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341592
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Dima TИзврат вобщем нужен.

Без изврата никак?
Стандартным путем 19851880
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341594
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnDima Tпропущено...

Там хуже все, при закрытии таким способом ссылки на активную форму остаются и она не до конца уничтожается, поэтому надо прикручивать таймер, который за первый такт выполнит цикл, а вторым тактом все остальное. Изврат вобщем нужен.

П-фф...Так может все-таки проверка на наличие открытых форм не так уж плоха? Или изврат все-таки обязателен для нормального приложения? ))
Зачем тебе контролировать то что не надо? Форма должна знать надо ей молча закрыться или переспросить пользователя. Если так будет все построено, не надо никаких извратов (в т.ч. циклов с закрытиями форм, это тоже изврат).
Нормально если остановка приложения это вызов
Код: sql
1.
clear events


а окончание работы это пару строк типа
Код: sql
1.
2.
3.
4.
5.
READ events
* тут действия при выходе
ON shutdown
ON ERROR
QUIT


почитай
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341600
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Это я почитал, и не раз, правда глубинного постижения нет все равно.

Почитаю, видимо, еще раз (
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341605
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T

ДимаТ, я тебе еще года два назад советовал не вводить в заблуждение хотя бы новичков.
Это старперы понимают, что к чему, и разберутся при необходимости.
ТС ведь вначале выложил свой проект, он простейший и чтобы прочитать его, нужно минут пятнадцать.
Человек годы бессмысленно потерял на твои извраты, а за это время мог бы нормально проект сделать.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341606
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnЭто я почитал, и не раз, правда глубинного постижения нет все равно.
Глубинный смысл прост: разработчики VFP не предусмотрели все возможные извраты, поэтому либо делать как они рекомендуют, либо изобретать свои извраты для обхода того что они не предусмотрели. Проще подстраиваться под "как рекомендуют".
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341609
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12, я тебе тогда ссылку давал куда идти. Могу повторить. Хочешь новичков учить - учи. Мне только не надо объяснять кого чему учить.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341630
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TDmitryKnЭто я почитал, и не раз, правда глубинного постижения нет все равно.
Глубинный смысл прост: разработчики VFP не предусмотрели все возможные извраты, поэтому либо делать как они рекомендуют, либо изобретать свои извраты для обхода того что они не предусмотрели. Проще подстраиваться под "как рекомендуют".

Тогда все можно свести к вопросу - надо ли при закрытии контролировать, что некоторые формы остались "открыты". Если нет - просто закрыли "как рекомендуют", если да - тогда "извраты".

В моем случае такой особой необходимости нет, поскольку вряд ли закрытие редактируемых форм приведет к потере какой-либо информации.
Однако склоняюсь к тому, что бы произвести проверку на наличие "открытых" форм в процедуре Exitprocedure, и в случае их наличия потребовать их сперва закрыть.

Использование QueryUnload, хотя, возможно, и более правильное, представляет сложность для меня на данном этапе. Я и так с большим трудом и не без помощи научился прятать системные тулбары и окна, а в случае применения QueryUnload они все снова вылазят и надо глубоко разбираться, как все откатить обратно.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341640
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnDima Tпропущено...

Глубинный смысл прост: разработчики VFP не предусмотрели все возможные извраты, поэтому либо делать как они рекомендуют, либо изобретать свои извраты для обхода того что они не предусмотрели. Проще подстраиваться под "как рекомендуют".

Тогда все можно свести к вопросу - надо ли при закрытии контролировать, что некоторые формы остались "открыты". Если нет - просто закрыли "как рекомендуют", если да - тогда "извраты".

В моем случае такой особой необходимости нет, поскольку вряд ли закрытие редактируемых форм приведет к потере какой-либо информации.
Однако склоняюсь к тому, что бы произвести проверку на наличие "открытых" форм в процедуре Exitprocedure, и в случае их наличия потребовать их сперва закрыть.

Использование QueryUnload, хотя, возможно, и более правильное, представляет сложность для меня на данном этапе. Я и так с большим трудом и не без помощи научился прятать системные тулбары и окна, а в случае применения QueryUnload они все снова вылазят и надо глубоко разбираться, как все откатить обратно.

Похоже, вам не приходило в голову, что ФоксПро хороший язык программирования, и на нем писали полноценные проекты.
Просто его время ушло.
Ваша проблема в том, что ДимаТ умеет писать проекты только с одной формой.
При большом количестве форм нужно уметь работать с визуальными классами и с объектом goApp.
...
Рейтинг: 0 / 0
Удаление окон при закрытии приложения
    #39341734
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Похоже, вам не приходило в голову, что ФоксПро хороший язык программирования, и на нем писали полноценные проекты.
Просто его время ушло.
Мда... как бы начинать новый проект на фоксе, не лучший выбор сегодня)
Для изучения, видно студенты используют. Ясно, выбора нет. Для самостоятельного - непонятно зачем.
Можно предположить что есть старый проект на фоксе, который надо поддерживать.

sg12Ваша проблема в том, что ДимаТ умеет писать проекты только с одной формой.
Где то он вас чем то задел))) Вы прямо таки всезнающий)))
sg12При большом количестве форм нужно уметь работать с визуальными классами и с объектом goApp.
Конечно, так лучше.
Для данной задачи создал класс базовой формы, решил в ней все описанные проблемы, и на ее основе делай любые формы, все при закрытии будут вести себя одинаково.
Т.е. без всяких копи-пастов.
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление окон при закрытии приложения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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