|
MODAL
|
|||
---|---|---|---|
#18+
Народ, что за прикол? Например, у нас три модальные формы (у каждой Desktop=.T.). Из первой вызываем вторую, из второй третью. Потом закрываем последнюю и должны вернутся на вторую. Но иногда , почему-то, возврат происходит на первую (хотя активная вторая, и сидит спрятанная под первой). Как проконтролировать какая форма будет OnTop? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 13:27 |
|
MODAL
|
|||
---|---|---|---|
#18+
И какой смысл маятся с As Top-Level формами, когда все-равно работаешь как с основным экраном VFP? Ну да ладно, это дело вкуса. Если я правильно понимаю, то порядок активизации форм определяется порядком следования форм в коллекции _SCREEN.Forms. Т.е. активна всегда форма с индексом 1. По ее закрытии будет активизирована форма с индексом 2 и т.п. Естесственно, следует учитывать, что при удалении формы индексы будут сдвинуты. Изменить порядок следования форм в коллекции можно через метод ZOrder() и Show(). Ну а отображение (не путать с активизацией) формы поверх других форм можно регулировать свойством AlwaysOnTop=.T. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 14:19 |
|
MODAL
|
|||
---|---|---|---|
#18+
Как тогда понимать, что порядок следования форми иногда бывает неправильный, а иногда все нормально? Слово "иногда" в программировании звучит как-то неестественно... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 14:31 |
|
MODAL
|
|||
---|---|---|---|
#18+
А почему с работаю с As Top-Level формами? Просто не хочится видить основного окна FOXа, его менюшки в готовом EXEшнике... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 14:43 |
|
MODAL
|
|||
---|---|---|---|
#18+
Я так понимаю, это после опыта работы на Delphi :) Подавить системное меню в главном окне можно командой SET SYSMENU OFF, но вообще-то запуск своего меню замещает системное (зависит от настроек). Т.е. создаешь свое меню в дезайнере, затем DO MyMenu.mpr и в основном окне FoxPro вместо системного будет твое собственное меню. А "иногда" - это копай свой код. Я привел ситуации когда это может произойти. Поскольку речь идет о As Top-Level формах, то вероятно возможны еще какие-нибудь заскоки. В общем случае, программирование на основе As Top-Level форм более трудоемкое занятие, по сравнению с программированием в основном окне FoxPro. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 16:22 |
|
MODAL
|
|||
---|---|---|---|
#18+
Не проверял, но может быть получится: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 16:48 |
|
MODAL
|
|||
---|---|---|---|
#18+
У меня была похожая ситуация. VFP7. Использовалась немодальная форма в основном окне. Из этой немодальной формы вызывалась модальная, со справочником для выбора. Из второй могла быть вызвана третья, тоже модальная, со справочником второго уровня, и т.д. ИНОГДА возникала странная ситуация - 3-я форма появлялась за 2-й, и делалась активной (с синим заголовком), но на действия пользователя не реагировала. Все остальные элементы - меню и формы - как и положено при вызове модального окна, становились недоступны. Код, вызывавший формы-справочники, был зашит в классе кнопки, и особой сложностью не отличался. Проблема возникала раз в несколько дней и только в скомпилированном приложении. Т.е. воспроизвести ее у себя на компе в среде разработки не получилось. Выкрутился я следующим образом. Т.к. формы и меню были недоступны, пришлось на On Key Label вешать аварийное закрытие форм и выдачу сообщения пользователю "Извини, брат. Придется тебе начинать все по-новой" Чем было вызвано такое поведение, я не знаю :( ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 17:13 |
|
MODAL
|
|||
---|---|---|---|
#18+
Да, я действительно программировал на Delphi. Да, SET SYSMENU OFF подавляет меню. А как же с заголовком основного окна?.. Можна ли и его как-небудь уничтожить (скрыть хотя бы)? То, что предлагает NNN, не работает. И как тогда "Изменить порядок следования форм в коллекции можно через метод ZOrder() и Show()". (Если можно маленький примерчик). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 17:44 |
|
MODAL
|
|||
---|---|---|---|
#18+
Интересно, после do form YourNextForm я дописал thisform.WindowState= 1 thisform.WindowState= 2 И вреде бы вернулся в нужную форму. Я так понимаю, что форма просто нуждается в перерисовке. thisform.Show(), thisform.Draw не дали ни какого еффекта. Может есть еще что-то, что может заменить эти две строчки с WindowState? Просто не красиво получаеться это сворачивание - розворачивание окна... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 18:24 |
|
MODAL
|
|||
---|---|---|---|
#18+
Вообще-то, идеология программирования FoxPro и Delphi сильно отличается. Если в качестве управляющего используется основное окно FoxPro, то управление осуществляется как правило, через собственно меню или ToolBar накладываемое на это основное окно. Поэтому речь никак не идет о том, что подавить системное меню или скрыть заголовок окна. Если интересно, то управление основным окном FoxPro осуществляется через специальный объект с именем "_SCREEN". Например: _SCREEN.Caption="Новый заголовок главного окна" Объект _SCREEN очень похож на объект-форму, хотя есть и отличия. В хелпе подробно описаны все его свойства и методы. Ряд настроек основного окна можно сделать еще ДО открытия FoxPro в файле конфигурации Config.FPW (это обычный текстовый файл). Например, тот же заголовок можно задать в нем так: TITLE=Новый заголовок главного окна ******************* Если дать команду: _SCREEN.Forms(2).ZOrder(0) то в случае если форма с индексом 2 в коллекции Forms НЕ модальная, то она выйдет на передний план и ее индекс в коллекции Forms станет равным 1. Для модальных форм я не проверял - не знаю к чему это приведет. Аналогично ведет себя метод SHOW(). Поскольку у тебя речь идет о цепочке модальных форм, то индекс родительской формы в коллекции Forms ВСЕГДА будет на 1 больше дочерней. Активная в данный момент форма ВСЕГДА имеет индекс 1 в коллекции Forms Еще посмотри такие функции WOUTPUT(), WONTOP() ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 18:30 |
|
MODAL
|
|||
---|---|---|---|
#18+
Можно "напомнить" форме, чтобы она оказалась сверху такой командой: ThisForm.AlwaysOnTop=.T. ThisForm.AlwaysOnTop=.F. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2003, 18:33 |
|
MODAL
|
|||
---|---|---|---|
#18+
По идее ничего подобного не должно происходить. На таком же подходе к формам всю жизнь все пашет без проблем. Надо глянуть как закрываешь формы. Только там может что-то мешать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2003, 07:57 |
|
MODAL
|
|||
---|---|---|---|
#18+
А как можно неправильно закрывать форму? Thisform.Release и вроде бы всё нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2003, 14:16 |
|
MODAL
|
|||
---|---|---|---|
#18+
Ну, тады не знаю... Какая версия фокса-то? И может в Activate форм чего-то срабатывает? И вызов форм тоже можно посмотреть. Короче, ситуация какая-то стрёмная... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2003, 15:23 |
|
MODAL
|
|||
---|---|---|---|
#18+
Фокс - VFP 7.0 Вызываю так: Кнопка, например, "Next form", в клике пишу DO FORM Nextform На кнопочку "Выход" (в Nextform) вешаю такое: ThisForm.Release. И всё. К статии, если после DO FORM Nextform всатавить ThisForm.AlwaysOnTop=.T., то типа работает все нормально. Но стоит свернуть-развернуть окно (с панели задач), то вторая форма может спрятаться за первую (а может и не спрятаться - как повезет). P.S. Там в менюшка какая-то кнопочка Next. Для чего она? Окна же модальные. Что там может быть следующим окном? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2003, 16:10 |
|
MODAL
|
|||
---|---|---|---|
#18+
Вот мои Non-Default Properties Для первой формы: Desktop=.T. MaxButton=.T. MinButton=.T. ShowWindow=2 - As Top-Level Form WindowState=2 - Maximized WindowType=1 - Modal Для всех остальных: Desktop=.T. MaxButton=.F. MinButton=.F. ShowWindow=2 - In Top-Level Form WindowState=2- Maximized WindowType=1 - Modal ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2003, 16:36 |
|
MODAL
|
|||
---|---|---|---|
#18+
Ну тады остается только попробовать придавить фокс не до смерти: в каком-нить событии основной формы (той что Top-Level), например в Activate попробуй поставить Application.Visible=.F. ...как-то отдает шаманизмом. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2003, 16:49 |
|
|
start [/forum/topic.php?fid=41&msg=32215920&tid=1598109]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 161ms |
0 / 0 |