|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Доброго дня всем! В случае возникновения ошибки мой обработчик предлагает принять решение продолжить или выйти из приложения. В последнем случае 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.
Кроме того, в метод форм release поместил такой код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Этот код я даже проверить пока не смог. Прошу помощи и советов по поводу процедуры закрытия вообще, и как закрыть окно в частности Заранее спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2016, 19:11 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Browse никто не использует в готовом приложении. Поэтому сложно что-то подсказать. Давай пример в виде рабочего кода. Маленький проект с демонстрацией проблемы сделай и выложи сюда. Может найдется решение. Но лучше замени Browse на форму с гридом. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2016, 19:31 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima T, В приложении одна только рабочая форма в "Справочники" - "Банки" На ней и тестирую Ошибка возникает, когда при открытом Browse окне нажать кнопки навигации, выбор Отмена должен, по идее, привести к выходу из приложения, но не приводит. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2016, 20:32 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Работает только меню "выход" и выход "крестиком" окна. И я просил сделать простой пример, демонстрирующий проблему, а не весь твой рабочий проект выкладывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 07:14 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima T, Нет, так не должно быть, service.app запусти. Там в проекте одна только форма есть, сделать простой пример - просто еще раз все тоже переписать. Ну попробую переписать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 10:52 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
А толку мне от твоего service.app ? Он запускается, меню с кнопками появляется, только до его кода мне никак не добраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 11:30 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima T, Ну вот такой вариант. При запуске main появится форма и маленький тулбар с навигацией и кнопкой "Browse". Кнопка Browse вызывает просмотр таблицы. Предполагается, что пользователь обязательно нажмет на кнопку навигации при открытой таблице и вызовет ошибку 1924 "Activeform is not an object" . Я предполагал сделать возможность выбора - или продолжить и не обращать внимания, или выйти из приложения совсем. Ну, не только для этого случая, но и в последствии. Так вот, при выборе "Отмена" должна работать процедура ExitProcedure, а закрыть окно в ней я не могу, даже если явным образом на это окно указываю. Можно ли как-то отследить открытое такое окно и закрыть его в коде? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 12:25 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Убери все лишнее из ExitProcedure. Так отлично работает Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 16:00 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima T, Убрал, как-то все равно не работает ( ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 16:16 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Странно, у меня работает. Скомпилировал exe - тоже работает. Запускаю, нажимаю на кнопку, выходит окно browse, жму крест, все закрывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 16:25 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima T, Так получается, что только если в процедуре обработки ошибок вместо CLEAR EVENTS сослаться непосредственно на процедуру ExitProcedure() - тогда все работает. Хотя после READ EVENTS в головной main сразу та самая ExitProcedure() и стоит. Спасибо большое за помощь, Dima T. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 16:36 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
По хорошему делается так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Переделал так, у меня тоже перестало выходить. В твое BROWSE надо добавить ключ NOWAIT Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 16:38 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima T, Не, не крест надо жать ) Нужно при открытом окне с таблицей жать на кнопки навигации (т.е. предполагаем, что пользователь когда-нибудь так и сделает) , тогда выйдет сообщение об ошибке, в этом сообщении выбор пользователю - ОК - продолжать и не обращать внимание, и ОТМЕНА - выйти совсем из приложения. Вот эта отмена и не работала ) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 16:41 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima TПо хорошему делается так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Переделал так, у меня тоже перестало выходить. В твое BROWSE надо добавить ключ NOWAIT Код: sql 1. 2. 3. 4. 5.
В чем же тогда смысл процедуры ExitProcedure ? Может просто CLEAR EVENTS ставить да и все, все равно получатся весь набор команд по выходу после READ EVENTS стоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 16:46 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Отмену закрытия формы надо прописывать в QueryUnload() формы Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 16:51 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
DmitryKnВ чем же тогда смысл процедуры ExitProcedure ? Может просто CLEAR EVENTS ставить да и все, все равно получатся весь набор команд по выходу после READ EVENTS стоит. Смысл ExitProcedure вызвать CLEAR EVENTS при нажатии на крестик закрытия приложения. Дальше должен работать код после READ EVENTS ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 16:53 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima T, Закрытие приложения "по-крестику" запретил _screen.Closable=.f. В моем случае добавлять NOWAIT в BROWSE будет не совсем правильно, без NOWAIT окно будет закрываться сразу после любого клика вне этого окна, что правильно. Таким образом, процедура примет вид: Код: sql 1. 2. 3. 4. 5. 6.
а в главном файле Код: sql 1. 2. 3. 4.
Все работает. Но кажется, что как-то.. неизящно, что ли ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 18:35 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
DmitryKnВсе работает. Но кажется, что как-то.. неизящно, что ли Да. Через жопу, но работает. DmitryKnЗакрытие приложения "по-крестику" запретил _screen.Closable=.f. Надо не запрещать, а делать нормально. BROWSE это наследие FoxPro 2.x for DOS. Забыть и не пользовать. Я же тебе написал что код для выхода должен быть после READ events. причем там не надо никаких лишних движений, т.к. QUIT вызовет деструкторы всех объектов, завершит процесс и виндовс почистит все что недочищено. Заморачиваться надо только на тему несохраненных изменений 19851943 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 19:43 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima T, Этот проект я сделал в прошлом году, и тогда немало советов и помощи получил, в том числе и от тебя, за что много и искренне благодарен. Так вот, будучи новичком и ламером, делал я его с формой верхнего уровня, а все формы с гридом. Теперь я решил проект (который через жопу, но работал) усовершенствовать, сделать его в главном окне (что стоило мне больших усилий) и сознательно в некоторых местах отказался от грида, просто мне визуально, эстетически, если угодно, больше нравится BROWSE. Мне казалось - это близко к совершенству, а ты - вчерашний день, забыть... Я на это неделю отпуска убил, а теперь выходит, что все это напрасно я затеял, так что ли ))) Чем грид все-таки лучше, чем BROWSE, если просто нужно на список глянуть? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2016, 20:54 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Сегодня только глянуть, завтра еще что-то добавить захочешь, например цветом что-то выделить или кнопки добавить. Если уж решил писать, то книжку почитай какую-нибудь. Неплохо написана Менахем Базиян "Использование Visual FoxPro 6" , я по ней VFP осваивал. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2016, 07:46 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima T, У меня В.Клепини и Т.Агафонова "VFP 9.0." и , кроме того, Мусина, "VFP 9.0". Не хватает только систематизированных знаний, например, образования по профилю, и систематических же занятий ), а так все есть. Спасибо большое, Dima Т, за помощь, буду переосмысливать проект. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2016, 15:35 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
DmitryKn, Browse хорош при отладке. Посмотреть что и как) А так, просто примите пока на веру слова Dima T И вообще, если что то не ясно, примите пока просто на веру, все что вам тут говорил Dima T ))) О книгах... Посмотрите в фоксклубе, много статей, в том числе о построении приложения. Прочтите все Максимова. Явно не будет лишним. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2016, 17:47 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
asdorDmitryKn, ... А так, просто примите пока на веру слова Dima T ... Это без всяких сомнений, непременно и абсолютно серьезно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2016, 18:55 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
DmitryKnЭто без всяких сомнений, непременно и абсолютно серьезно. ... и глупо, только годы напрасно потеряете. Сомнительно, что лет за десять на советах десятилетней давности вы сумеете создать хоть что-то путное. К сожалению, ФоксПро умер лет десять назад, и этим все сказано. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2016, 20:42 |
|
Удаление окон при закрытии приложения
|
|||
---|---|---|---|
#18+
Dima TОтмену закрытия формы надо прописывать в QueryUnload() формы Код: sql 1. 2. 3.
Если было открыто 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 14:11 |
|
|
start [/forum/topic.php?fid=41&msg=39341168&tid=1582037]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 247ms |
total: | 374ms |
0 / 0 |