|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
DmitryKn, авторЕсли было открыто n окон и одно из них в режиме редактирования, но неактивно, т.е. не очевидно, и пользователь внезапно нажал "крестик" и подтвердил свое желание выйти, забыв о существовании формы в режиме редактирования, то какой код остановит выход из приложения, конечно, но уже запустятся всякие процессы закрытия, повылазят тулбары и системные окна и т.д. и, в конечном счете все сведется к саспендигнореканселу с последующим диспетчером задач. Откат к исходному состоянию - даже боюсь думать, где там разбираться. Просто сначала закройте все открытые окна. Сама форма, должна знать в каком она состоянии, и в случае нужды, задать вопрос. После удачного закрытия всех окон, можно продолжать уничтожать остальное. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 14:26 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
asdorDmitryKn, Просто сначала закройте все открытые окна. Сама форма, должна знать в каком она состоянии, и в случае нужды, задать вопрос. После удачного закрытия всех окон, можно продолжать уничтожать остальное. Ну или так ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 14:38 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
asdor, Не или))) Только сам объект знает, как лучше вести себя при уничтожении (и не толькл). Не надо лезть в них. Есть однотипные события, действия... дальше совсем банально) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 15:00 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Процедура закрытия Код: 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.
Последовательно закрывает все формы. В QueryUnload формы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
По идее, при попытке закрыть приложение, должны закрыться последовательно все формы, при закрытии формы должен быть проверен код QueryUnload и выдан запрос. Однако при нажатии на "крестик" приложения при открытой на редактирование форме, просто все закрывает и все, как если бы никакого кода в QueryUnload нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 18:07 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
DmitryKnВ QueryUnload формы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
По идее, при попытке закрыть приложение, должны закрыться последовательно все формы, при закрытии формы должен быть проверен код QueryUnload и выдан запрос. Однако при нажатии на "крестик" приложения при открытой на редактирование форме, просто все закрывает и все, как если бы никакого кода в QueryUnload нету. Скорее всего this.isedit = .F. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 19:00 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima T, isedit=.t. присваивается, когда форму открываем на редактирование, тут правильно. Более того, если при редактировании формы не указывать closable=.f., то код в QueryUnload срабатывает, если саму открытую форму попытаться закрыть "по-крестику". Именно форму, а не само приложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 19:06 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
[quot Dima T]DmitryKnВ QueryUnload формы: ... Скорее всего this.isedit = .F. И, если как я ранее проверку открытых форм делал - считается количество открытых форм, т.е. isedit присутствует очевидно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 19:16 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
DmitryKnБолее того, если при редактировании формы не указывать closable=.f., то код в QueryUnload срабатывает, если саму открытую форму попытаться закрыть "по-крестику". Именно форму, а не само приложение. Зачем указывать closable=.f. ? Ткнет пользователь в крестик формы - выйдет сообщение. Зачем закрытие формы блокировать? Возможно QueryUnload не отрабатывает из-за closable=.f., не проверял. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 19:20 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima TDmitryKnБолее того, если при редактировании формы не указывать closable=.f., то код в QueryUnload срабатывает, если саму открытую форму попытаться закрыть "по-крестику". Именно форму, а не само приложение. Зачем указывать closable=.f. ? Ткнет пользователь в крестик формы - выйдет сообщение. Зачем закрытие формы блокировать? Возможно QueryUnload не отрабатывает из-за closable=.f., не проверял. closable = .f. указывается в методе toedit на клик кнопки "Edit", т.е. в момент начала редактирования данных на форме, и устанавливается в closable = .t. в методе save, предотвращая таким образом закрытие формы во время редактирования. Но формы, а не проекта. Я попробовал исключить closable из кода, это ничего не меняет, не в этом причина. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 19:27 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
А какова будет вообще последовательность в процедуре 19859075 ? Может FOR ... ENDFOR не успевает отработать? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 19:30 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Я проверил: при closable = .f. и закрытии окна фокса крестиком - QueryUnload() НЕ вызывается, просто закрывается форма. при closable = .t. QueryUnload() срабатывает хоть на крестик окна фокса, хоть на крестик формы. поставь первой строкой в QueryUnload() Код: sql 1.
и посмотри отладчиком что там происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 19:37 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
DmitryKnА какова будет вообще последовательность в процедуре 19859075 ? Может FOR ... ENDFOR не успевает отработать? Там хуже все, при закрытии таким способом ссылки на активную форму остаются и она не до конца уничтожается, поэтому надо прикручивать таймер, который за первый такт выполнит цикл, а вторым тактом все остальное. Изврат вобщем нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 19:41 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima TИзврат вобщем нужен. Без изврата никак? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 19:53 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima TDmitryKnА какова будет вообще последовательность в процедуре 19859075 ? Может FOR ... ENDFOR не успевает отработать? Там хуже все, при закрытии таким способом ссылки на активную форму остаются и она не до конца уничтожается, поэтому надо прикручивать таймер, который за первый такт выполнит цикл, а вторым тактом все остальное. Изврат вобщем нужен. П-фф...Так может все-таки проверка на наличие открытых форм не так уж плоха? Или изврат все-таки обязателен для нормального приложения? )) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 19:58 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 20:06 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
DmitryKnDima Tпропущено... Там хуже все, при закрытии таким способом ссылки на активную форму остаются и она не до конца уничтожается, поэтому надо прикручивать таймер, который за первый такт выполнит цикл, а вторым тактом все остальное. Изврат вобщем нужен. П-фф...Так может все-таки проверка на наличие открытых форм не так уж плоха? Или изврат все-таки обязателен для нормального приложения? )) Зачем тебе контролировать то что не надо? Форма должна знать надо ей молча закрыться или переспросить пользователя. Если так будет все построено, не надо никаких извратов (в т.ч. циклов с закрытиями форм, это тоже изврат). Нормально если остановка приложения это вызов Код: sql 1.
а окончание работы это пару строк типа Код: sql 1. 2. 3. 4. 5.
почитай ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 20:13 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima T, Это я почитал, и не раз, правда глубинного постижения нет все равно. Почитаю, видимо, еще раз ( ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 20:28 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima T ДимаТ, я тебе еще года два назад советовал не вводить в заблуждение хотя бы новичков. Это старперы понимают, что к чему, и разберутся при необходимости. ТС ведь вначале выложил свой проект, он простейший и чтобы прочитать его, нужно минут пятнадцать. Человек годы бессмысленно потерял на твои извраты, а за это время мог бы нормально проект сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 20:33 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
DmitryKnЭто я почитал, и не раз, правда глубинного постижения нет все равно. Глубинный смысл прост: разработчики VFP не предусмотрели все возможные извраты, поэтому либо делать как они рекомендуют, либо изобретать свои извраты для обхода того что они не предусмотрели. Проще подстраиваться под "как рекомендуют". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 20:35 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
sg12, я тебе тогда ссылку давал куда идти. Могу повторить. Хочешь новичков учить - учи. Мне только не надо объяснять кого чему учить. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 20:39 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima TDmitryKnЭто я почитал, и не раз, правда глубинного постижения нет все равно. Глубинный смысл прост: разработчики VFP не предусмотрели все возможные извраты, поэтому либо делать как они рекомендуют, либо изобретать свои извраты для обхода того что они не предусмотрели. Проще подстраиваться под "как рекомендуют". Тогда все можно свести к вопросу - надо ли при закрытии контролировать, что некоторые формы остались "открыты". Если нет - просто закрыли "как рекомендуют", если да - тогда "извраты". В моем случае такой особой необходимости нет, поскольку вряд ли закрытие редактируемых форм приведет к потере какой-либо информации. Однако склоняюсь к тому, что бы произвести проверку на наличие "открытых" форм в процедуре Exitprocedure, и в случае их наличия потребовать их сперва закрыть. Использование QueryUnload, хотя, возможно, и более правильное, представляет сложность для меня на данном этапе. Я и так с большим трудом и не без помощи научился прятать системные тулбары и окна, а в случае применения QueryUnload они все снова вылазят и надо глубоко разбираться, как все откатить обратно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 21:08 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
DmitryKnDima Tпропущено... Глубинный смысл прост: разработчики VFP не предусмотрели все возможные извраты, поэтому либо делать как они рекомендуют, либо изобретать свои извраты для обхода того что они не предусмотрели. Проще подстраиваться под "как рекомендуют". Тогда все можно свести к вопросу - надо ли при закрытии контролировать, что некоторые формы остались "открыты". Если нет - просто закрыли "как рекомендуют", если да - тогда "извраты". В моем случае такой особой необходимости нет, поскольку вряд ли закрытие редактируемых форм приведет к потере какой-либо информации. Однако склоняюсь к тому, что бы произвести проверку на наличие "открытых" форм в процедуре Exitprocedure, и в случае их наличия потребовать их сперва закрыть. Использование QueryUnload, хотя, возможно, и более правильное, представляет сложность для меня на данном этапе. Я и так с большим трудом и не без помощи научился прятать системные тулбары и окна, а в случае применения QueryUnload они все снова вылазят и надо глубоко разбираться, как все откатить обратно. Похоже, вам не приходило в голову, что ФоксПро хороший язык программирования, и на нем писали полноценные проекты. Просто его время ушло. Ваша проблема в том, что ДимаТ умеет писать проекты только с одной формой. При большом количестве форм нужно уметь работать с визуальными классами и с объектом goApp. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 21:55 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
sg12Похоже, вам не приходило в голову, что ФоксПро хороший язык программирования, и на нем писали полноценные проекты. Просто его время ушло. Мда... как бы начинать новый проект на фоксе, не лучший выбор сегодня) Для изучения, видно студенты используют. Ясно, выбора нет. Для самостоятельного - непонятно зачем. Можно предположить что есть старый проект на фоксе, который надо поддерживать. sg12Ваша проблема в том, что ДимаТ умеет писать проекты только с одной формой. Где то он вас чем то задел))) Вы прямо таки всезнающий))) sg12При большом количестве форм нужно уметь работать с визуальными классами и с объектом goApp. Конечно, так лучше. Для данной задачи создал класс базовой формы, решил в ней все описанные проблемы, и на ее основе делай любые формы, все при закрытии будут вести себя одинаково. Т.е. без всяких копи-пастов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2016, 11:15 |
|
|
start [/forum/moderation_log.php?user_name=beerman]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 7340ms |
total: | 7495ms |
0 / 0 |