Форум » GUI » Модальное окно убегает от юзера » Ответить

Модальное окно убегает от юзера

Andrey: Всем привет ! Что то стали модальные окна пропадать... Т.е. прячутся под первое модальное окно. Юзера будут в шоке. Проблема. Открываю основное окно WINDOWTYPE STANDARD, далее по кнопке открывается модальное окно. На этом модальном окне по другой кнопке ACTION { || &(cRunErr) } открывается окно с Фастрепортом. После закрытия Фастрепорта, модальное окно прячется под основное окно. Раньше не пряталось, с какой версии так стало и не могу сказать. Даже если с модального окна вызвать другое модальное окно (типа индексации базы), то 1-ое модальное окно тоже прячется. Как можно вернуться обратно на первое модальное окно ? Что добавить в кнопку ACTION { || &(cRunErr) } ? Сергей писал об этом ранее, но я упустил этот момент. Может глобально можно это поправить ?

Ответов - 5

SergKis: Andrey пишет Как можно вернуться обратно на первое модальное окно ? Попробуй [pre2] FUNC Modal1( ) LOCAL hWnd := ThisWindow.Handle LOCAL hOld := _HMG_InplaceParentHandle _HMG_InplaceParentHandle := hWnd DEFINE WINDOW ... MODAL ... ... END WINDOW CENTER WINDOW ... ACTIVATE WINDOW ... _HMG_InplaceParentHandle := hOld RETURN Nil [/pre2]

Andrey: Ура ! Помогло ! Спасибо !

SergKis: Andrey В событии можно так[pre2] ACTION { || _wPost(10, , {This.Name, cRunErr}) } ... (This.Object):Event(10, {|ow,ky,aval, crun| ky := aval[1], crun := apar[2], ..., Modal1(ow)} ) ... FUNC Modal1(oWnd) LOCAL hOld := _HMG_InplaceParentHandle _HMG_InplaceParentHandle := oWnd:Handle DEFINE WINDOW ... MODAL ... ... END WINDOW CENTER WINDOW ... ACTIVATE WINDOW ... _HMG_InplaceParentHandle := hOld RETURN Nil [/pre2] В своей версии при работе с mdi+modal, исп. такой вариант (в тек. версии, возможно что то надо добавить) Для информации. [pre2] FUNCTION Save_Rest_HMG( uHMG ) // save\restore _HMG_... переменные перед MODAL LOCAL aHMG IF hb_IsArray(uHMG) aHMG := uHMG _HMG_BeginWindowMDIActive := aHMG[ 1] _HMG_ActiveStatusHandle := aHMG[ 2] _HMG_UserWindowHandle := aHMG[ 3] _HMG_SetFocusExecuted := aHMG[ 4] _HMG_ThisFormName := aHMG[ 5] _HMG_ThisControlName := aHMG[ 6] _HMG_ActiveFontName := aHMG[ 7] _HMG_ActiveFontSize := aHMG[ 8] _HMG_ExtendedNavigation := aHMG[ 9] _HMG_InplaceParentHandle := aHMG[10] ELSE aHMG := array(10) aHMG[ 1] := _HMG_BeginWindowMDIActive aHMG[ 2] := _HMG_ActiveStatusHandle aHMG[ 3] := _HMG_UserWindowHandle aHMG[ 4] := _HMG_SetFocusExecuted aHMG[ 5] := _HMG_ThisFormName aHMG[ 6] := _HMG_ThisControlName aHMG[ 7] := _HMG_ActiveFontName aHMG[ 8] := _HMG_ActiveFontSize aHMG[ 9] := _HMG_ExtendedNavigation aHMG[10] := _HMG_InplaceParentHandle _HMG_BeginWindowMDIActive := .F. _HMG_ExtendedNavigation := .T. If hb_IsNumeric(uHMG) _HMG_InplaceParentHandle := uHMG EndIf ENDIF RETURN aHMG [/pre2] Использую FUNC Modal1(oWnd) LOCAL aHmg := Save_Rest_HMG( oWnd:Handle ) ... ACTIVATE WINDOW ... Save_Rest_HMG(aHmg) RETURN Nil


Andrey: Что то с окнами непонятное происходит. Есть окно WINDOWTYPE STANDARD, из него вызываю окно MODAL с добавкой: [pre2] LOCAL hWnd := ThisWindow.Handle LOCAL hOld := _HMG_InplaceParentHandle ..... _HMG_InplaceParentHandle := hWnd DEFINE WINDOW Form_Repоrt ; MODAL ; ..... @ BUTTONEX Btn_Start ACTION (myStart) ... ..... END WINDOW ACTIVATE WINDOW Form_Report _HMG_InplaceParentHandle := hOld [/pre2] Вызываю по кнопке Btn_Start ACTION (myStart) отдельный модуль расчёта. Если в этом модуле не вызывать другие окна, то всё отлично работает. Если в этом модуле вызвать другое окно MODAL (Form_F2F), то после него прога рушиться и говорит нет Окна. Вот код в модуле: [pre2] ? ProcNL() ? " 1 Была форма=",cForm,"Сейчас форма=", ThisWindow.Name aRet := Form_Comp01(cFileReestr,"Режим сравнения: "+aModeWrite[nModeWrite],cPeriod) IF LEN(aRet) == 0 RETURN .T. ENDIF ? "aRet=", aRet, HB_ValToExp(aRet) ? ProcNL() ? " 2 Была форма=",cForm,"Сейчас форма=" ?? ThisWindow.Name // вылет, строка 147 [/pre2] Вот что в логе: [pre2]Вызов из: COMPARE01REPRT(136) --> form_compare01.prg 1 Была форма= Form_Repоrt Сейчас форма= Form_Repоrt aRet= ARRAY[2] {2, {"поиск по графе л/счёт", "поиск по графе л/счёт (18 знаков)"}} Вызов из: COMPARE01REPRT(145) --> form_compare01.prg 2 Была форма= Form_Repоrt Сейчас форма= И вылет !!! Вот такой: Error MGERROR/0 Window: Form_F2F is not defined. Program terminated. Called from MSGMINIGUIERROR(0) Called from GETPROPERTY(0) Called from COMPARE01REPRT(147) in module: form_compare01.prg Called from (b)HB_MACROBLOCK(0)[/pre2] Как исправить ошибку ? Почему теряется окно ?

Andrey: Поставил на форму Form_Repоrt тестовую кнопку и вызываю другое окно MODAL (Form_F2F). Всё равно идёт ошибка, но другая: [pre2] Error MGERROR/0 Control: Image_1 Of Form_F2F Not defined. Program terminated.[/pre2] Методом проб и ошибок сделал следующее. Был такой простой код: [pre2] ACTION {|aR| Doevents(), aR := SelectTest() , MsgDebug(aR), This.Image_1.Setfocus } [/pre2] Сделал так: [pre2] ACTION {|aR| Doevents(), aR := SelectTest() , MsgDebug(aR), myFocus() } ..... STATIC FUNCTION myFocus() Form_Report.Image_1.Setfocus DO EVENTS RETURN NIL[/pre2] И всё заработало без ошибок.



полная версия страницы