powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / MODAL
18 сообщений из 18, страница 1 из 1
MODAL
    #32214481
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, что за прикол?
Например, у нас три модальные формы (у каждой Desktop=.T.). Из первой вызываем вторую, из второй третью. Потом закрываем последнюю и должны вернутся на вторую. Но иногда , почему-то, возврат происходит на первую (хотя активная вторая, и сидит спрятанная под первой).
Как проконтролировать какая форма будет OnTop?
...
Рейтинг: 0 / 0
MODAL
    #32214575
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И какой смысл маятся с As Top-Level формами, когда все-равно работаешь как с основным экраном VFP? Ну да ладно, это дело вкуса.

Если я правильно понимаю, то порядок активизации форм определяется порядком следования форм в коллекции _SCREEN.Forms. Т.е. активна всегда форма с индексом 1. По ее закрытии будет активизирована форма с индексом 2 и т.п.

Естесственно, следует учитывать, что при удалении формы индексы будут сдвинуты.

Изменить порядок следования форм в коллекции можно через метод ZOrder() и Show().

Ну а отображение (не путать с активизацией) формы поверх других форм можно регулировать свойством AlwaysOnTop=.T.
...
Рейтинг: 0 / 0
MODAL
    #32214590
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как тогда понимать, что порядок следования форми иногда бывает неправильный, а иногда все нормально?

Слово "иногда" в программировании звучит как-то неестественно...
...
Рейтинг: 0 / 0
MODAL
    #32214610
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему с работаю с As Top-Level формами?
Просто не хочится видить основного окна FOXа, его менюшки в готовом EXEшнике...
...
Рейтинг: 0 / 0
MODAL
    #32214777
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю, это после опыта работы на Delphi :)

Подавить системное меню в главном окне можно командой SET SYSMENU OFF, но вообще-то запуск своего меню замещает системное (зависит от настроек). Т.е. создаешь свое меню в дезайнере, затем DO MyMenu.mpr и в основном окне FoxPro вместо системного будет твое собственное меню.

А "иногда" - это копай свой код. Я привел ситуации когда это может произойти. Поскольку речь идет о As Top-Level формах, то вероятно возможны еще какие-нибудь заскоки.

В общем случае, программирование на основе As Top-Level форм более трудоемкое занятие, по сравнению с программированием в основном окне FoxPro.
...
Рейтинг: 0 / 0
MODAL
    #32214806
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не проверял, но может быть получится:
Код: plaintext
1.
do form YourNextForm
thisform.show()
...
Рейтинг: 0 / 0
MODAL
    #32214835
karly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня была похожая ситуация.

VFP7. Использовалась немодальная форма в основном окне.
Из этой немодальной формы вызывалась модальная, со справочником для выбора.
Из второй могла быть вызвана третья, тоже модальная, со справочником
второго уровня, и т.д.

ИНОГДА возникала странная ситуация - 3-я форма появлялась за 2-й,
и делалась активной (с синим заголовком), но на действия пользователя не реагировала.
Все остальные элементы - меню и формы - как и положено при вызове модального окна, становились недоступны.

Код, вызывавший формы-справочники, был зашит в классе кнопки,
и особой сложностью не отличался. Проблема возникала раз в несколько дней
и только в скомпилированном приложении. Т.е. воспроизвести ее
у себя на компе в среде разработки не получилось.

Выкрутился я следующим образом. Т.к. формы и меню были недоступны,
пришлось на On Key Label вешать аварийное закрытие форм и выдачу
сообщения пользователю "Извини, брат. Придется тебе начинать все по-новой"

Чем было вызвано такое поведение, я не знаю :(
...
Рейтинг: 0 / 0
MODAL
    #32214873
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, я действительно программировал на Delphi.
Да, SET SYSMENU OFF подавляет меню.
А как же с заголовком основного окна?.. Можна ли и его как-небудь уничтожить (скрыть хотя бы)?
То, что предлагает NNN, не работает.

И как тогда "Изменить порядок следования форм в коллекции можно через метод ZOrder() и Show()". (Если можно маленький примерчик).
...
Рейтинг: 0 / 0
MODAL
    #32214919
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, после
do form YourNextForm
я дописал
thisform.WindowState= 1
thisform.WindowState= 2
И вреде бы вернулся в нужную форму.
Я так понимаю, что форма просто нуждается в перерисовке.
thisform.Show(), thisform.Draw не дали ни какого еффекта.
Может есть еще что-то, что может заменить эти две строчки с WindowState?
Просто не красиво получаеться это сворачивание - розворачивание окна...
...
Рейтинг: 0 / 0
MODAL
    #32214924
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, идеология программирования 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()
...
Рейтинг: 0 / 0
MODAL
    #32214925
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно "напомнить" форме, чтобы она оказалась сверху такой командой:

ThisForm.AlwaysOnTop=.T.
ThisForm.AlwaysOnTop=.F.
...
Рейтинг: 0 / 0
MODAL
    #32215090
_w
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
_w
Гость
По идее ничего подобного не должно происходить. На таком же подходе к формам всю жизнь все пашет без проблем. Надо глянуть как закрываешь формы. Только там может что-то мешать.
...
Рейтинг: 0 / 0
MODAL
    #32215677
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как можно неправильно закрывать форму?
Thisform.Release
и вроде бы всё нормально.
...
Рейтинг: 0 / 0
MODAL
    #32215843
_w
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
_w
Гость
Ну, тады не знаю...
Какая версия фокса-то?
И может в Activate форм чего-то срабатывает?
И вызов форм тоже можно посмотреть. Короче, ситуация какая-то стрёмная...
...
Рейтинг: 0 / 0
MODAL
    #32215920
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фокс - VFP 7.0
Вызываю так:
Кнопка, например, "Next form", в клике пишу
DO FORM Nextform
На кнопочку "Выход" (в Nextform) вешаю такое:
ThisForm.Release.
И всё.

К статии, если после DO FORM Nextform всатавить ThisForm.AlwaysOnTop=.T., то типа работает все нормально. Но стоит свернуть-развернуть окно (с панели задач), то вторая форма может спрятаться за первую (а может и не спрятаться - как повезет).

P.S. Там в менюшка какая-то кнопочка Next. Для чего она? Окна же модальные. Что там может быть следующим окном?
...
Рейтинг: 0 / 0
MODAL
    #32215974
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот мои 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
...
Рейтинг: 0 / 0
MODAL
    #32216003
_w
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
_w
Гость
Ну тады остается только попробовать придавить фокс не до смерти:
в каком-нить событии основной формы (той что Top-Level), например в Activate
попробуй поставить

Application.Visible=.F.

...как-то отдает шаманизмом.
...
Рейтинг: 0 / 0
MODAL
    #32216045
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без Desktop=.T. заработало.
Правда накрыть первую форму не удалось. Получилось что-то вроде MDI.
Ну короче...

Всем спасибо.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / MODAL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]