
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
20.08.2003, 16:58
|
|||
|---|---|---|---|
Top-Level и модальные формы |
|||
|
#18+
Попереключайтесь на форму - обратно в среду - на форму Top-Level форма перестает отвечать на действия юзера - замораживается. К тому же при клике на таскбаре она не всегда активизируется виндой. Но даже будучи активизированной, далее, при активации среды она перекрывает среду поверх, как будто она AlwaysOnTop. Известно, что, любая форма, вызванная из модальной однозначно становится модальной. С другой стороны, Top-Level форма никогда не может быть модальной. Но, в любом случае, что за бредовые визуальные эффекты? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.08.2003, 17:58
|
|||
|---|---|---|---|
Top-Level и модальные формы |
|||
|
#18+
Aijik, это провакация :)) > Известно, что, любая форма, вызванная из модальной однозначно становится модальной. Модальной по отношению к какой форме ? Если к IDE - согласен , но к вызвавшей форме она может быть и Modeless? - отсюда и глюк с "недоступностью", потому что управление вернулось к StartForm, a TopLevelForm "болтается" ничем не припертая. Если соблюсти небольшие "правила приличия", то все работает как надо :) (извиняюсь за отсутствие оформления - не умею :) oStartForm = CREATEOBJECT("StartForm") oStartForm.Show(1) CLEAR ALL CANCEL DEFINE CLASS StartForm AS Form ADD OBJECT TopLevelCMD AS CommandButton WITH; Height = 40,; Top = 40,; Left = 50 PROCEDURE TopLevelCMD.Click() PUBLIC oTopLevelForm oTopLevelForm = CREATEOBJECT("TopLevelForm") oTopLevelForm.Show() READ EVENTS ENDDEFINE DEFINE CLASS TopLevelForm AS Form AutoCenter = .T. ShowWindow = 2 Height = 500 Width = 500 ADD OBJECT CloseTopForm AS CommandButton WITH; Height = 40,; Top = 40,; Left = 50 PROCEDURE CloseTopForm.Click() CLEAR EVENTS ThisForm.Release ENDDEFINE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.08.2003, 09:37
|
|||
|---|---|---|---|
Top-Level и модальные формы |
|||
|
#18+
Модальной по отношению к какой форме ? Если к IDE - согласен , но к вызвавшей форме она может быть и Modeless? Не может, Равиль. Она автоматом также становится модальной, какой бы она не была описана при разработке. Пример обратного, плиз, если можно... Без топ-левел форм (с ними не стоит рассуждать о модальности - им чуждо это понятие). Мой пример. Удалим в описании класса TopLevelForm строку ShowWindow = 2. Укажем даже для наглядности WindowType=0 и Show(2), хоть это и так по-дефолту. А теперь попробуйте при активной ModelessForm обратиться к StartForm. Фокс не даст этого сделать, т.к. oModelessForm стала модальной , хотя в классе была описана как немодальная и вызывалась как немодальная (Show(2)): Код: 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. Далее, по Вашему примеру. Вы ставите точку останова READ EVENTS, т.е. по-сути эмулируете модальность топ-левел формы. Но является ли "нормальным" такое использование READ EVENTS именно в данном конкретном случае (то, что это общая стратегия вызова "а-ля модальных" топ-левел форм - это понятно, я говорю про рассматриваемый случай с вызовом топ-левел формы из модальной)? По-идее всё хорошо, и среда работает, обрабатывает события, и топ-левел форма, юзер переключается туда-сюда безо всяких осложнеий. Идиллия :). Айда веселиться дальше... Попробуйте вернуться в IDE и закрыть StrartForm крестом... Опца... Не закрывается... Оно и понятно, форма не может закрыться, пока выполняется хотя бы один из его методов (метод TopLevelCMD.Click() до сих пор висит на READ EVENTS) Странная ситуация для идиллии, не правда ли? Поедем дальше, вернемся в топ-левел форму и нажмем CloseTopForm - вылетают обе. К тому же, а как вы этот выкрутас с READ EVENTS будете делать в реальном приложении в EXE, в котором уже запущен READ EVENTS? Любой последующий READ EVENTS будет проигнорирован. Так что этот финт уж вовсе неприменим "в реальных боевых условиях". И это вы называете "соблюдением правил приличия"? ;)) Т.е. это я все к тому, что нельзя READ EVENTS использовать для такого случая. И вообще, я спорить не собирался особо ;) ... Смысл ветки был в том, чтобы показать, что MS не разрулило эту ситуацию и возникают глюки. Надо явно было запретить вызов Top-Level из модальных форм (либо другой вариант защиты предусмотреть). Эта ситуация, кстати, явлется "близняшкой" обсуждавшейся некогда на Фоксклубе ситуации, когда из немодальной (ModelessForm) формы вызывается модальная (ModalForm), и затем, в одном из методов ModalForm выдается ModelessForm.Show(). В результате ModelessForm становится модальной и перекрывает ModalForm. Ситуация, которая по-идее не должна иметь места ни при каких обсоятельствах . Ошибка, дыра в защите Фокса, если хотите... ЗЫ Код оформляется так: Вставьте его, выделите и нажмите кнопку Code под текстбоксом "Тема" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.08.2003, 10:25
|
|||
|---|---|---|---|
Top-Level и модальные формы |
|||
|
#18+
Aijik, Видимо MS не проработали эту ситуацию по причине того, что вызывать Top-Level из формы - не очень красиво в принципе, и надо ли? Это все-равно, что вызывать IDE из формы. Обычно Top-Level материнская форма - главная форма приложения и при ее вызове IDE лучше спрятать. Применение Read Events в моем примере - согласен не корректно, но соответствует поставленной задаче ;)) А Modeless формы из Top-Level можно вызывать так (не претендуя на оптимальность и безупречность кода - только принцип): Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.08.2003, 10:35
|
|||
|---|---|---|---|
Top-Level и модальные формы |
|||
|
#18+
! Только не закрывай главную по [x] - эта ситуация не описана :) нужен Clear events в Destroy формы - извини если все подвесил :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.08.2003, 10:45
|
|||
|---|---|---|---|
Top-Level и модальные формы |
|||
|
#18+
MS не проработали эту ситуацию по причине того, что вызывать Top-Level из формы - не очень красиво в принципе, и надо ли? Согласен, но мало ли какие могут быть причины для такого вызова... Факт ведь имеет место быть и глюки тоже. MS по-крайней мере должно было предупредить о нежелательности такого вызова в документации По поводу примера... Ну да, все правильно. Никто не спорит. Причем и модально тоже можно их вызывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.08.2003, 10:47
|
|||
|---|---|---|---|
Top-Level и модальные формы |
|||
|
#18+
! Только не закрывай главную по [x] - эта ситуация не описана :) нужен Clear events в Destroy формы - извини если все подвесил :)) Уже подвешивал.. По привычке X жал. К нашему вопросу это отношения не имеет - мелочь. Не в том же суть дебатов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=41&tablet=1&tid=1598014]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 264ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...