powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вызов модальной формы
10 сообщений из 10, страница 1 из 1
Вызов модальной формы
    #34900691
Пронин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть главная форма из нее по нажатию кнопки вызываю модальную форму в свойстве WindowType которой стоит 1.
Код: plaintext
1.
DO FORM Export2XLS NAME frmExport2XLS WITH THISFORM, THISFORM.XLSParameter
В методе Init формы Export2XLS выставляю параметр FirstRun = .T.
И в Activate методе делаю следующее
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DODEFAULT()

IF THISFORM.FirstRun == .T. THEN
  THISFORM.FirstRun = .F.
  *====================
  * цикл для выгрузки данных с обновлением progressbar
  DOEVENTS FORCE
  THISFROM.Draw()
  *====================
ENDIF

При этом, если я двигаю мышью и щелкаю по форме родителю, которая вызвала Export2XLS она спокойно активизируется и с ней можно работать. Что за глюк такой не понятно???
...
Рейтинг: 0 / 0
Вызов модальной формы
    #34900726
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй убрать из кода вот это:
Код: plaintext
1.
2.
  DOEVENTS FORCE
  THISFROM.Draw()
...
Рейтинг: 0 / 0
Вызов модальной формы
    #34900901
Пронин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но в этом случае форма не будет отрисовываться + на модальной форме есть кнопка прерывания операции экспорта, поэтому без DOEVENTS FORCE обойтись нельзя, иначе какой-то недружелюбный интерфейс получится.
...
Рейтинг: 0 / 0
Вызов модальной формы
    #34901032
Пронин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, действительно убрав DOEVENTS модальная форма работает как надо, но КАК ТОГДА РАБОТАТЬ С ЦИКЛОМ??? Как осуществить прерывание процесса по нажатию на кнопку в этом случае???
...
Рейтинг: 0 / 0
Вызов модальной формы
    #34901047
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПронинНо в этом случае форма не будет отрисовываться + на модальной форме есть кнопка прерывания операции экспорта, поэтому без DOEVENTS FORCE обойтись нельзя, иначе какой-то недружелюбный интерфейс получится.
Ну тогда прописывай все побочные последствия DOEVENTS FORCE

Лучше прерывание по Escape сделать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
set escape on
on escape llExit = .T.
llExit = .F.
... 
* Тут цикл с таким кодом:
if llExit
   exit
endif
...
...
Рейтинг: 0 / 0
Вызов модальной формы
    #34901208
Пронин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TНу тогда прописывай все побочные последствия DOEVENTS FORCE

А какие это последствия, просто не в курсе 8) Esc не хочется, хочется чтобы юзер нажимал на кнопочку.
...
Рейтинг: 0 / 0
Вызов модальной формы
    #34901281
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пронин Dima TНу тогда прописывай все побочные последствия DOEVENTS FORCE

А какие это последствия, просто не в курсе 8) Esc не хочется, хочется чтобы юзер нажимал на кнопочку.
Это значит при запуске цикла с DOEVENTS установить какой-нибудь глобальный флаг и везде куда только может ткнуть мышкой юзер вставить проверку этого флага и какую-то реакцию при его наличии. Могу ошибаться, но кажется по другому никак.

DOEVENTS в цикле удобно использовать в немодальном режиме для эмуляции многопочности. Юзер запустил что-то долгоиграющее, открыл другое окошко и там работает. И то чтобы комфортно работать было надо чтобы DOEVENTS не реже 2-3 раз в секунду происходил.
...
Рейтинг: 0 / 0
Вызов модальной формы
    #34901293
Пронин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упс. Нехилое требование 8))) Что, действительно, подругому никак???
...
Рейтинг: 0 / 0
Вызов модальной формы
    #34902050
12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая версия Фокса?
Вообще-то проблемы с выпрыгиванием из модальных форм были всегда - всему виной то, что на уровне окон Windows они не считаются модальными.

Помогало перекрытие события Activate в базовом классе формы (используемом во всем проекте):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
IF This.WindowType =  1  &&Modal
  This.AlwaysOnTop = .T.
  This.AlwaysOnTop = .F.
  m.poActiveModalForm = This
 ELSE 
  IF NOT ISNULL(m.poActiveModalForm) THEN 
    m.poActiveModalForm.Show( 1 )
  ENDIF 

Публичную переменную poActiveModalForm надо инициализировать NULL'ом при старте приложения.

В методах Hide и Destroy:
Код: plaintext
1.
2.
3.
IF This.WindowType =  1  &&Modal
  m.poActiveModalForm = Null
ENDIF 

Решение кривое, но какое есть.
...
Рейтинг: 0 / 0
Вызов модальной формы
    #34902073
12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри при кпировании упустил закрывающий ENDIF.
И переменную по-честному надо бы назвать goActiveModalForm. У меня это просто вообще доп. свойство объекта Application.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вызов модальной формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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