|
|
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
Для выполнения некой служебной операции надо закрыть все открытые формы. Чаще всего, она одна :-), да еще тулбар. В меню создал процедуру с таким кодом: LOCAL lnrez,lni lnrez=_screen.FormCount FOR lni=1 TO lnrez IF TYPE("_screen.Forms[lni]")!="O" OR ISNULL(_screen.Forms[lni]) EXIT ELSE IF UPPER(_screen.Forms[lni].name)!="MTOOLBAR" _screen.Forms[lni].release() ENDIF ENDIF ENDFOR lnrez=MESSAGEBOX("Выполнить некую операцию ?",4+32+256,'Внимание') IF lnrez=6 do myprog.prg ELSE WAIT WINDOW 'Ну и не надо!' TIMEOUT 1 ENDIF Однако форма закрывается только после завершения этой процедуры. Что ей мешает закрыться тогда, когда мне надо, _до_ вызова myprog.prg ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2008, 16:27 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
Скорее всего, модальность. Попробуй закрывать формы так: Код: plaintext 1. 2. 3. Предварительное сокрытие формы через метод Hide() отменяет модальность формы и позволяет ей себя закрыть. Хотя, в общем случае, процесс закрытия всех открытых форм это не такая простая задача как может показаться. Попробуй сделать поиск по данному форуму. Проблема уже обсуждалась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2008, 22:56 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
ВладимирМСкорее всего, модальность. Попробуй закрывать формы так: Код: plaintext 1. 2. 3. Предварительное сокрытие формы через метод Hide() отменяет модальность формы и позволяет ей себя закрыть. Хотя, в общем случае, процесс закрытия всех открытых форм это не такая простая задача как может показаться. Попробуй сделать поиск по данному форуму. Проблема уже обсуждалась. ТАК все, что надо, закрывается. Спасибо. Однако, форма не была модальной. Что-то другое мешало... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2008, 15:01 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
Может ActiveX "болтался" на ней ? С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2008, 15:15 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
Aleksey-KМожет ActiveX "болтался" на ней ? С уважением, Алексей С предыдущим сообщением я поспешил :-( На самом деле, форма только "прячется", но не убивается. ActiveX в проекте не используется. Тут что-то иное, даже интересно стало. Опытным путем обнаружил, что не убивается форма при определенных условиях. Добавил в проект пример. Простая немодальная форма, в ДЕ открыта 1 таблица. Буферизация отключена. На форме грид, который отображает данные таблицы, и кнопка. Все на основе базовых классов, никакие методы не переопределялись (кнопка тоже). Так вот, если фокус у грида, форма не закрывется, если у кнопки - закрывается программкой из первого сообщения этой ветки без проблем. Что бы это значило? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2008, 16:55 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
Aleksey-KМожет ActiveX "болтался" на ней ? С уважением, Алексей Могу добавить, что используется VFP9 SP2, если это имеет значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2008, 16:59 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
оч. настораживает Ваше сообщение ... сам только как вчера 4 часа вчера форму с ума сошел ... ухожу на кнопку - ок или увожу фокус с формы на другую - ок фокус на гриде - не рушится - не выполняется метод дестрой формы извращения с фокусировкой, дерганьем формы, убивание всех объектов в релизе .... и другие шам-ва рез-та не дали вфп9сп2 возможно простое совпадение .... но у меня ответа нет - сам под столом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2008, 19:06 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
ну вот без классов запустить нажать - Закрыть все метод формы дестрой вып-ся после того как закончится вып-е проц-ры закр-я форм Ваши соображения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2008, 15:39 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
подергайте пример на др.версиях (кроме 9сп2) повторяется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2008, 17:03 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
VFP9SP1 Запускаю start.prg В меню "Закрыть все" форма с экрана исчезает потом сообщение "Exit" потом "Destroy" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2008, 17:17 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
Убрал TRY ... CATCH из start.prg попробовал в VFP6SP5 - тоже самое Думаю проблема в следующем: Код меню выполняется в контексте активной формы, поэтому Destroy() не отрабатывает пока код не выполнится. Другой тест: Запускаю start.prg Мышкой кликаю в окно фокса (форма становится не активной) В меню "Закрыть все" форма с экрана исчезает потом "Destroy" потом сообщение "Exit" в этом тесте меню отрабатывает в контексте окна фокса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2008, 17:31 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
ок прошу решения проблемы код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2008, 17:35 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
Можно через таймер порешать. Таймер не начнет работать пока весь остальной код не отработает, если DOEVENT не будет. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2008, 17:44 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
http://forum.foxclub.ru/read.php?29,296850,296850#msg-296850 нечто оч.похожее попробуйте увести фокус .... в прнципе можно увести мышь и кликнуть, но это не решение ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2008, 17:44 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
прошелмимопопробуйте увести фокус .... в прнципе можно увести мышь и кликнуть, но это не решение ... Это должно быть непрограмно :) иначе код увода фокуса или мыши начнет работать все равно в контексте формы. Кроме варианта с таймером мыслей больше нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2008, 17:48 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
подождем др.решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2008, 17:51 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
прошелмимоподождем др.решения А таймер чем не понравился? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2008, 17:54 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
Dima T прошелмимоподождем др.решения А таймер чем не понравился? Я тоже сразу о таймере подумал... Это, конечно, решение, но вопрос остался... Почему есть разница, у кого фокус - у кнопки или у грида? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2008, 12:16 |
|
||
|
Закрыть все формы из процедуры в меню
|
|||
|---|---|---|---|
|
#18+
s_gonchЯ тоже сразу о таймере подумал... Это, конечно, решение, но вопрос остался... Почему есть разница, у кого фокус - у кнопки или у грида? Не знаю - грид фокса вообще очень капризный контрол. Это контейнер, а фокс, например, не вызывает Destroy() формы до тех пор, пока есть ссылки на контролы формы. Может с этим как-то связано. Я свое предположение объясняющее такое поведение высказал: Dima TДумаю проблема в следующем: Код меню выполняется в контексте активной формы, поэтому Destroy() не отрабатывает пока код не выполнится. Только это не активной формы касается, а грида на ней. Тут похожее предположение сделано: прошелмимоhttp://forum.foxclub.ru/read.php?29,296850,296850#msg-296850 А исходя из таких предположений - думаю в этой ситуации в фоксе какие-то внутренние события откладываются, и обойти их порядок (дать им выполнится) можно только таймером. В данной ситуации точный ответ о причине такого поведения могут дать только разработчики VFP, а нам только гадать остается и обходные пути изобретать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2008, 14:15 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35098469&tid=1588226]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 417ms |

| 0 / 0 |
