Автор | Сообщение |
|
| |
Пост N: 4
Зарегистрирован: 17.12.14
|
|
Отправлено: 24.12.14 11:34. Заголовок: Проблема с модальным окном MiniGUI2.4
Помогите пожалуйста. Из главного окна приложения ухожу в модальное окно. Если переключиться на другое окно (другое приложение), а потом попытаться вернуться в мое приложение, щелкнув на значке окна, то фокус получает не модальное окно (которое до того было активным), а главное окно приложения. Модальное окно становится активным только если свернуть все остальные окна. Ошибка? Как исправить?
|
|
|
Ответов - 17
[только новые]
|
|
|
| постоянный участник
|
Пост N: 3874
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.12.14 14:26. Заголовок: alexandr11 пишет: О..
alexandr11 пишет: Давай отдельный пример. И под какой системой работаешь ? У меня на Win8.1 тоже есть непонятка: с главного окна вызываю CHILD окно, а потом с CHILD окна вызываю MODAL окно. переключаюсь на другое окно, потом обратно на задачу, только под модальным окном находиться MAIN окно. После выхода из MODAL окна, появляется CHILD окно. Может и правильно делается, я не знаю.....
|
|
|
|
| |
Пост N: 5
Зарегистрирован: 17.12.14
|
|
Отправлено: 24.12.14 16:04. Заголовок: работаю в WindowsXP ..
работаю в WindowsXP моя проблема очень похожа на Вашу. когда активно модальное окно, внизу в панели отображается имя его родительского окна. если уйти в другое приложение, а затем щелкнуть на нем, то на экране появится не модальное окно, а родительское. притом оно не активно. в MiniGUI1.0 работало. вот очень похожий пример. поочередно активируются 3 окна. если третье - модальное, то после его закрытия фокус почему-то получает первое, при этом второе окно деактивируется. если второе окно сделать child, то оно останется на экране, но фокус все равно получит первое окно если третье окно - не модальное, то фокус ожидаемо получает второе окно #include "minigui.ch" ************************** Function Main DEFINE WINDOW SAST_1; AT 0,0 ; WIDTH 500; HEIGHT 500; TITLE "SAST_1"; MAIN DEFINE BUTTON B1 ROW 100 COL 100 WIDTH 90 HEIGHT 30 CAPTION "GOSAST_2" ACTION GOSAST_2() END BUTTON END WINDOW CENTER WINDOW SAST_1 activate window SAST_1 Return Nil ******************* FUNCTION GOSAST_2 DEFINE WINDOW SAST_2 ; AT 0,0 ; WIDTH 400 HEIGHT 400 ; TITLE "SAST_2" DEFINE BUTTON B1 ROW 100 COL 100 WIDTH 90 HEIGHT 30 CAPTION "GOSAST_3" ACTION GOSAST_3() END BUTTON END WINDOW CENTER WINDOW SAST_2 ACTIVATE WINDOW SAST_2 RETURN(.T.) ******************* FUNCTION GOSAST_3 DEFINE WINDOW SAST_3 ; AT 0,0 ; WIDTH 300 HEIGHT 300 ; TITLE "SAST_3"; MODAL END WINDOW CENTER WINDOW SAST_3 ACTIVATE WINDOW SAST_3 RETURN(.T.)
|
|
|
|
| moderator
|
Пост N: 702
Зарегистрирован: 11.02.10
|
|
Отправлено: 24.12.14 16:26. Заголовок: alexandr11 пишет: в..
alexandr11 пишет: Благодарю за пример. Для решения проблемы определите второе окно как дочернее (CHILD). Исправленный пример см. ниже Скрытый текст
include "minigui.ch" ************************** Function Main DEFINE WINDOW SAST_1; AT 0,0 ; WIDTH 500; HEIGHT 500; TITLE "SAST_1"; MAIN DEFINE BUTTON B1 ROW 100 COL 100 WIDTH 90 HEIGHT 30 CAPTION "GOSAST_2" ACTION GOSAST_2() END BUTTON END WINDOW CENTER WINDOW SAST_1 activate window SAST_1 Return Nil ******************* FUNCTION GOSAST_2 DEFINE WINDOW SAST_2 ; AT 0,0 ; WIDTH 400 HEIGHT 400 ; TITLE "SAST_2" ; CHILD DEFINE BUTTON B1 ROW 100 COL 100 WIDTH 90 HEIGHT 30 CAPTION "GOSAST_3" ACTION GOSAST_3() END BUTTON END WINDOW CENTER WINDOW SAST_2 ACTIVATE WINDOW SAST_2 RETURN(.T.) ******************* FUNCTION GOSAST_3 DEFINE WINDOW SAST_3 ; AT 0,0 ; WIDTH 300 HEIGHT 300 ; TITLE "SAST_3"; MODAL END WINDOW CENTER WINDOW SAST_3 ACTIVATE WINDOW SAST_3 RETURN(.T.)
|
|
|
|
|
| |
Пост N: 6
Зарегистрирован: 17.12.14
|
|
Отправлено: 24.12.14 16:35. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Для решения проблемы определите второе окно как дочернее (CHILD). |
| я об этом писал. при закрытии третьего окна второе окно остается, но фокус получает первое окно а вот при переходе в другое приложение и обратно - полностью помогло (видимо по причине того, что первое окно я прячу HIDE) спасибо!
|
|
|
|
| постоянный участник
|
Пост N: 3885
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.01.15 02:32. Заголовок: Непонятка у меня с м..
Непонятка у меня с моим модальным окном. Добавил в свой проект новую форму из другого проекта. Теперь при попытке его открыть - выходит ошибка: Error MGERROR/0 Non Modal Window Form_Spr can't be activated when a Modal window is active. Program terminated. Called from MSGMINIGUIERROR(91) Called from _ACTIVATEWINDOW(1356) Called from DOMETHOD(4677) Called from FORM_SPRAVKI(428) В предыдущем проекте эта форма работала, а после добавления в большой проект не работает.... ........... ON MAXIMIZE { || ResizeSprBrowse() } ; CHILD ; NOMINIMIZE NOSYSMENU Может быть из-за того что вызываю из меню с окном МODAL ? Как перевести и исправить эту ошибку ?
|
|
|
|
| постоянный участник
|
Пост N: 1020
Зарегистрирован: 27.01.07
|
|
Отправлено: 09.01.15 09:47. Заголовок: Andrey пишет: Как п..
Andrey пишет: "Немодальное окно Form_Spr не может быть активировано, когда (пока) активно модальное окно"
|
|
|
|
| постоянный участник
|
Пост N: 3886
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.01.15 15:05. Заголовок: PSP пишет: "Нем..
PSP пишет: цитата: | "Немодальное окно Form_Spr не может быть активировано, когда (пока) активно модальное окно" |
| Т.е. нельзя после MODAL-окна вызывать другие окна ? А как тогда можно делать ?
|
|
|
|
| |
Пост N: 7
Зарегистрирован: 17.12.14
|
|
Отправлено: 10.01.15 17:51. Заголовок: если не ошибаюсь, об..
если не ошибаюсь, обходил такую проблему в MiniGUI 1.0 попробуйте спрятать модальное окно (hide), затем активировать второе, а после его закрытия вернуться в первое (restore) также в MiniGUI 1.0 использовал следующее: есть переменная _HMG_IsModalActive. перед активацией второго модального окна присваиваем ей значение .F. а после его закрытия - .T. возможно, в каком-то случае возникнут ошибки, но у меня все работает
|
|
|
|
| постоянный участник
|
Пост N: 3889
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.01.15 12:13. Заголовок: alexandr11 пишет: п..
alexandr11 пишет: цитата: | перед активацией второго модального окна присваиваем ей значение .F. а после его закрытия - .T. |
| Спасибо БОЛЬШОЕ ! То что нужно !
|
|
|
|
| постоянный участник
|
Пост N: 4009
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.03.15 23:14. Заголовок: Andrey пишет: У мен..
Andrey пишет: цитата: | У меня на Win8.1 тоже есть непонятка: с главного окна вызываю CHILD окно, а потом с CHILD окна вызываю MODAL окно. переключаюсь на другое окно, потом обратно на задачу, только под модальным окном находиться MAIN окно. После выхода из MODAL окна, появляется CHILD окно. Может и правильно делается, я не знаю..... |
| Вот с этим я так и не разобрался до сих пор. Как это исправить ? 1) с главного окна вызываю доп.окно (без указания CHILD) ( а какое это окно тогда по умолчанию ? ) Скрытый текст IF !IsWindowActive( Form_Config ) DEFINE WINDOW Form_Config ; BACKCOLOR aBackColor ; NOMAXIMIZE NOSIZE ; ON INIT MyInitConfig() .............. END WINDOW ............... ELSE // !IsWindowActive( Form_Config ) SwitchToWin( "Form_Config" ) // переключить на форму ENDIF // !IsWindowActive( Form_Config )
| 2) c этого окна вызываю CHILD окно. Под ним появляется MAIN окно... Почему ? При закрытии CHILD окна появляется доп.окно ! Непорядок....
|
|
|
|
| постоянный участник
|
Пост N: 488
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.03.15 14:45. Заголовок: Andrey используй ст..
Andrey используй стек для окон (как делали в clipper). в init window добавляешь окно в стек а в release window удаляешь последний элемент (свое окно) и ставь фокус принудительно на получившийся последний. (в стеке можно с контролом хранить на который устанавливаться фокусом)
|
|
|
|
|
| постоянный участник
|
Пост N: 4016
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.03.15 15:04. Заголовок: Я понял эту идею. Ме..
Я понял эту идею. Меня не устраивает то что при переходе в CHILD окно под ним устанавливается MAIN . Почему ? Т.е. тогда мне самому нужно переключать окно в ON INIT (окна CHILD) на доп.окно ?
|
|
|
|
| постоянный участник
|
Пост N: 489
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.03.15 15:32. Заголовок: Andrey пишет:Т.е. то..
Andrey пишет: цитата: | Т.е. тогда мне самому нужно переключать |
| окнами придется управлять тебе самому, нравится это тебе или нет. окна надо скрывать, разрушать и создавать снова, оставляя видимыми, например 1-2 последних child + modal, а остальные hide или release
|
|
|
|
| постоянный участник
|
Пост N: 4020
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.03.15 17:24. Заголовок: SergKis пишет: окна..
SergKis пишет: цитата: | окнами придется управлять тебе самому |
| Понял. Спасибо !
|
|
|
|
| постоянный участник
|
Пост N: 4021
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.03.15 17:48. Заголовок: Переделал (поставил ..
Переделал (поставил CHILD в создании окна/до этого не было), помогло... Всё замечательно теперь. Только если окно уже открыто и под другими программами, то не переключаются вообще... В проге поставил, что Григорий давал: IF !IsWindowActive( Form_Spr ) ..... ACTIVATE WINDOW Form_Spr // показываем форму ELSE // !IsWindowActive( Form_Spr ) SwitchToWin( "Form_Spr" ) // переключить на форму ENDIF // !IsWindowActive( Form_Spr ) *----------------------------------- Function SwitchToWin( cForm ) *----------------------------------- If _IsWindowDefined( cForm ) If IsIconic( GetFormHandle(cForm) ) _Restore( GetFormHandle(cForm) ) Else DoMethod( cForm, "SetFocus" ) EndIf EndIf Return Nil
|
|
|
|
| постоянный участник
|
Пост N: 490
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.03.15 23:21. Заголовок: Andrey пишет:то не п..
Andrey пишет: цитата: | то не переключаются вообще. |
| попробуй SetProperty(cForm,"Topmost", .T.)
|
|
|
|
| постоянный участник
|
Пост N: 4025
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.03.15 00:28. Заголовок: SergKis пишет: попр..
SergKis пишет: цитата: | попробуй SetProperty(cForm,"Topmost", .T.) |
| Заработало ! Ура ! Спасибо !!!
|
|
|
|