On-line: гостей 4. Всего: 4 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 6515
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.11.19 21:04. Заголовок: Как вернуть на экран своё окно ?


Непонятка большая у юзеров, да и у меня тоже....
Запускаю Фар и Мозилу, потом прогу на минигуи.
В проге на МиниГуи открываю своё окно печати :
   PUBLIC oBrwP 
.....
DEFINE WINDOW Form_F5 ;
.....
nHandle := ThisWindow.Handle
....
DEFINE TBROWSE oBrwP ;
.....
CELL
END TBROWSE
....
@ nRowButt, nColButt BUTTONEX BUTTON_Print WIDTH nWButt HEIGHT nHButt ;
..........
ACTION {|| MenuPrint("F5", oBrwP:nAt), DoEvents(), BringWindowToTop( nHandle ) }
....

По кнопке в функции MenuPrint() ставлю в конце функции:
STATIC FUNCTION MenuF5F4(cFKey,nLine) 
.....
hWinHandle := nHandle

cRet := &cRun(cMenu, cForma, ....)
....
ShowWindow( hWinHandle, 6 ) // MINIMIZE windows
ShowWindow( hWinHandle, 1 ) // SW_NORMAL windows
DO EVENTS
BringWindowToTop( hWinHandle ) // A window on the foreground

BrwButtonShowHide(.T.) // разблокировать кнопки внизу формы

DO EVENTS
oBrwP:Setfocus()
DO EVENTS

SELECT(nTekSelect)
RETURN Nil

После выхода из cRet := &cRun(cMenu, cForma, ....) появляется окно Фара, а окно печати под Фаром.
Если Фар скинуть на панель задач, то появляется окно Мозилы, а моё окно печати под ней.
Почему так ? Как вернуть своё окно печати поверх всех окон ?

Если Фар и Мозилу скинуть на панель задач, то только тогда появляется моё окно, т.к. нет других открытых задач.
Но у юзеров постоянно куча окон открыто и они теряются, ищут окно печати.

P.S. Забыл уточнить, на главной форме висит таймер каждые 1 минуту проверяет то что нужно.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 17 [только новые]


постоянный участник




Пост N: 6596
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.02.20 12:11. Заголовок: Опять непонятки пове..


Опять непонятки поведения МиниГуи в Win8.1 и WinServer 2012
В WinServer 2012 теряется модальное окно.
В проге есть окно Form_0 c бровсом(таблица) и кнопкой вызова для модального окна Form_1, на неё есть кнопка вызова другого модального окна Form_2.
После закрытия Form_2 на экране остаётся таблица, которую нельзя редактировать, так как модальное окно Form_1
прячется на MAIN окне.
Пока не тыкнешь на MAIN окне - только тогда поднимается модальное окно Form_1 и можно дальше работать.

На Win8.1 такого нет.

Достаточно ли будет поставить так, чтобы убрать эту непонятку ?
     ....  
Show_Form2() // вызов модального окна Form_2
Form_1.Restore
DO EVENTS


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3080
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.02.20 13:03. Заголовок: Andrey пишет Достато..


Andrey пишет
 цитата:
Достаточно ли будет поставить так, чтобы убрать эту непонятку ?


Практика показала, что нет. Когда делал менеджер запуска clipper программ по DosBox и windows программ по командам из DosBox менеджером (ShellExecuteEx), описанная тобой ситуация, под 10 и 7 была во всей красе, под 8 все отлично, как надо. BringToTop не помогали. Моя борьба с этим закончилась тем, что окно менеджера минимизирую, запускаю wvt\hmg\vo программу и по окончании их работы поднимаю окно менеджера. Все сообщения менеджера, при окне DosBox и др. раб. окон (MsgStop(), MsgBox(),...) выходили но передний план, но не в фокусе, т.е. надо доп. по ним кликать мышкой. Сделал доп. комплект этих ф-й с добавленным параметром hWnd родителя и при 0 (окно десктоп родитель) окна сообщений стали работать почти как надо, кроме первого раза. Т.е. первый раз любое окно сообщения было не в фокусе. С окнами сообщений завершил работу тем, что убрал их и стал общаться с DosBox, т.е. перенес сообщения на прогу, работающую в DosBox (bat файл).
В таком виде работает стабильно.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3081
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.02.20 13:52. Заголовок: Andrey Если Form_2 ..


Andrey
Если Form_2 вызываешь из под Form_1, то
попробуй на Form_2 до DEFINE WINDOW ... сделать
hParent := _hmg_InplaceParentHandle
_hmg_InplaceParentHandle := GetFormHandle(ThisWindow.Name) // 'Form_1'
...
Form_2.Action

_hmg_InplaceParentHandle := hParent

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6597
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.02.20 15:58. Заголовок: SergKis пишет: Если..


SergKis пишет:

 цитата:
Если Form_2 вызываешь из под Form_1, то попробуй на Form_2 до DEFINE WINDOW ... сделать



У меня в программе 2 режима вызова этого окна.
1) сразу одна кнопка вызова Show_Form2()
2) есть доп.окно Form_1 и вызов с этого окна по кнопке Show_Form2()

Как мне сделать эту обработку только для режима 2 ?
Т.е. там
      DEFINE WINDOW Form_1 
....
@ ... nG BUTTONEX Btn_F4 ... ;
....
ACTION {|| ToF4(), oBrw:SetFocus() }
....
END WINDOW
Form_1.Action
...

Function ToF4()

Show_Form2() // вызов модального окна Form_2
Form_1.Restore
DO EVENTS
Return Nil


На втором компе проверил по удалёнке, там стоит WinServer 2008 - отлично работает, костылей не нужно.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3082
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.02.20 16:40. Заголовок: FUNCTION _DefineMod..


 
FUNCTION _DefineModalWindow ( FormName, Caption, x, y, w, h, Parent, nosize, nosysmenu, nocaption, aMin, aMax, ;
...
IF _HMG_InplaceParentHandle <> 0
Parent := _hmg_InplaceParentHandle
ELSEIF ! _HMG_BeginWindowMDIActive
Parent := _hmg_MainHandle
ENDIF
...

Делай для всех окон модальных, как я написал. Это привязка мод. окна к родителю. По умолчанию к main окну.
Поможет ли ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6598
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.02.20 16:44. Заголовок: SergKis пишет: Дела..


SergKis пишет:

 цитата:
Делай для всех окон модальных, как я написал. Это привязка мод. окна к родителю. По умолчанию к main окну.
Поможет ли ?



А куда это вставить, модуль какой ?
Вообще то меня забодало (юзеров тоже),
открываешь несколько модальных окон и потом нужно дергать MAIN окно.
Может это нужно сразу поставить в МиниГуи ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3083
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.02.20 16:54. Заголовок: Andrey пишет А куда ..


Andrey пишет
 цитата:
А куда это вставить, модуль какой ?


У тебя, как понимаю, окна в функциях. Вот в них и делаешь. Повторю на твоем примере
 
LOCAL hParent := _hmg_InplaceParentHandle

_hmg_InplaceParentHandle := GetFormHandle(ThisWindow.Name)

DEFINE WINDOW Form_1
....
@ ... nG BUTTONEX Btn_F4 ... ;
....
ACTION {|| ToF4(), oBrw:SetFocus() }
....
END WINDOW
Form_1.Action

_hmg_InplaceParentHandle := hParent
...


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6599
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.02.20 17:00. Заголовок: SergKis пишет: Вот ..


SergKis пишет:

 цитата:
Вот в них и делаешь. Повторю на твоем примере


Спасибо БОЛЬШОЕ !
Буду пробовать...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3084
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.02.20 17:03. Заголовок: PS Можно попробовать..


PS
Можно попробовать добавить
 
LOCAL cWnd := ThisWindow.Name
LOCAL cFocus := This.FocusedControl
...
_hmg_InplaceParentHandle := hParent
DoMethod(cWnd, 'SetFocus')
IF ! empty(cFocus)
DoMethod(cWnd, cFocus, 'SetFocus')
ENDIF
...


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6605
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.04.20 16:38. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно попробовать добавить


Поставил. Вроде нормально работает, пока юзера не жаловались...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6606
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.04.20 16:55. Заголовок: Всем привет - отдыха..


Всем привет - отдыхающим и работающим !!!

Вопрос возник по окнам:
Есть окно
   DEFINE WINDOW Form_OtvetSite     ; 
WINDOWTYPE STANDARD ;
NOMAXIMIZE NOSIZE NOCAPTION ;
ON INIT { || IniGetPosWindow(,,cTitle), SetProperty("Form_OtvetSite", "Topmost", .T.) } ;
....
@ ... BUTTONEX Button_Exit ;
CAPTION 'Выход' ;
......
ACTION { || Form_OtvetSite.Minimize, Form_OtvetSite.Label_Title.Setfocus }

DEFINE TIMER Timer_1 INTERVAL OTVET_TIMER * nMsec ACTION DownldOtvetSite()

END WINDOW

ACTIVATE WINDOW Form_OtvetSite NOWAIT
....

Это окно можно скинуть на рабочий стол и оно там находиться постоянно.
Раз в 5-10 минут (в зависимости от настроек) по таймеру идёт запрос к PostgreSql и если там есть данные, то окно
Form_OtvetSite.Restore и располагается повер всех окон.
Всё классно работает, если на экране нет MODAL окна, если есть, то труба - сколько не жми кнопку Выход,
ничего не происходит, пока окно MODAL не закроешь, доступа к кнопке Выход НЕТ !
Как исправить данную ситуацию ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3108
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.04.20 21:15. Заголовок: Andrey пишет Это окн..


Andrey пишет
 цитата:
Это окно можно скинуть на рабочий стол и оно там находиться постоянно


В чем смысл нахождения этого окна постоянно в работе\ожидании ?
Можно проверить изменения и запустить окно modal когда надо, оно тогда всегда запустится

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6607
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.04.20 22:08. Заголовок: SergKis пишет: В че..


SergKis пишет:

 цитата:
В чем смысл нахождения этого окна постоянно в работе\ожидании ?


Чтобы юзер увидел когда окно поднялось, что пришёл ответ от мастера (PostgreSql) и вывожу этот ответ в это окно.
Юзер может отложить (скинуть на раб.стол) этот ответ и продолжить работу.
Когда юзер захочет, то может вернутся к этому окну ответа.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3110
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.04.20 22:37. Заголовок: Andrey пишет пока ок..


Andrey пишет
 цитата:
пока окно MODAL не закроешь, доступа к кнопке Выход НЕТ !


Так и должно быть, пока модал на экране, можешь создавать модал окно, а другое будет не доступно.

 цитата:

Чтобы юзер увидел когда окно поднялось, что пришёл ответ от мастера (PostgreSql) и вывожу этот ответ в это окно.
Юзер может отложить (скинуть на раб.стол) этот ответ и продолжить работу.
Когда юзер захочет, то может вернутся к этому окну ответа.


Вместо поднятия создавай новое окно и имей режим создания такого окна с последними данными от Postgres/
У тебя даже все упростится в работе окон, от того, что есть сейчас

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6608
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.04.20 13:37. Заголовок: SergKis пишет: Вмес..


SergKis пишет:

 цитата:
Вместо поднятия создавай новое окно и имей режим создания такого окна с последними данными от Postgres/
У тебя даже все упростится в работе окон, от того, что есть сейчас


Не совсем то...
Не будет режима: отложить окно (*.Minimize) пока юзер занят другой работой.
Вроде единственный вариант пока для меня проверять, есть ли окно работы у юзера с карточкой (Form_Card)
и не поднимать окно ответа в этом случае.

Хотя лучше бы сделать на проверку - есть ли MODAL окно на экране ? Как это можно сделать ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3111
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.04.20 14:54. Заголовок: Andrey пишет Не буде..


Andrey пишет
 цитата:
Не будет режима: отложить окно (*.Minimize) пока юзер занят другой работой.


По мне.
Абсолютно "пустой" режим (*.Minimize), вполне можно обходится без этого висящего окна.
Его можно создавать, в любой момент, когда надо или вообще вынести в программу фона, посадив в tray (работу с Postgres)

 цитата:
Хотя лучше бы сделать на проверку - есть ли MODAL окно на экране ? Как это можно сделать ?


Тип окна "M" проверь и дальше что ... ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6609
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.04.20 16:57. Заголовок: SergKis пишет: Тип ..


SergKis пишет:

 цитата:
Тип окна "M" проверь и дальше что ... ?


Не буду поднимать окно Form_OtvetSite.Restore
Нормальное решение для юзера.

SergKis пишет:

 цитата:
посадив в tray (работу с Postgres)


Не знаю как трей работает с сервером-терминалов, да и обычные юзера теряются с треем,
ему понятней свернутое окно программы.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 43
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет