Опять про всплывающие окна ...
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Опять про всплывающие окна ...
Привет всем !
Хочу поднять старую тему, хотя она уже вроде не раз обсуждалась.
Среда - C62 9049 ABC. Задача все таже - в интерфейсе MDI проверять, было ли открыто уже окно и если ДА, то просто заставить его всплыть наверх, т.е. передать на него фокус. Вроде все просто и понятно, при запуске процесса запоминаем номер потока:
Glo:OneProcess = Start(Browse,25000)
При попытке повторного запуска передаем в поток событие:
Post(Event:GainFocus,,Glo:OneProcess)
Событие в поток приходит - но окно упорно не хочет "всплывать" наверх. Да и если разобраться, то Event:GainFocus - это событие КОГДА окно получает фокус. А как заставить окно получить этот фокус ? Moжет быть есть, что вроде Event:WindowsOnTop ? Чувствую, что запутался в элементарном - заранее спасибо за подсказку !
Хочу поднять старую тему, хотя она уже вроде не раз обсуждалась.
Среда - C62 9049 ABC. Задача все таже - в интерфейсе MDI проверять, было ли открыто уже окно и если ДА, то просто заставить его всплыть наверх, т.е. передать на него фокус. Вроде все просто и понятно, при запуске процесса запоминаем номер потока:
Glo:OneProcess = Start(Browse,25000)
При попытке повторного запуска передаем в поток событие:
Post(Event:GainFocus,,Glo:OneProcess)
Событие в поток приходит - но окно упорно не хочет "всплывать" наверх. Да и если разобраться, то Event:GainFocus - это событие КОГДА окно получает фокус. А как заставить окно получить этот фокус ? Moжет быть есть, что вроде Event:WindowsOnTop ? Чувствую, что запутался в элементарном - заранее спасибо за подсказку !
- StillZero
- Ветеран
- Сообщения: 454
- Зарегистрирован: 06 Июль 2005, 2:17
- Откуда: Хабаровск
- Контактная информация:
на GainFocus повесить надо
см. ABCFree -рулят
Код: Выделить всё
IF SELF.Opened
IF 0{PROP:Iconize}=TRUE
0{PROP:Iconize}=FALSE
END
IF 0{PROP:Active}<>TRUE
0{PROP:Active}=TRUE
END
END
Re: Опять про всплывающие окна ...
всё проще, я делаю такИгорь Столяров писал(а):Привет всем !
Хочу поднять старую тему, хотя она уже вроде не раз обсуждалась.
Среда - C62 9049 ABC. Задача все таже - в интерфейсе MDI проверять, было ли открыто уже окно и если ДА, то просто заставить его всплыть наверх, т.е. передать на него фокус. Вроде все просто и понятно, при запуске процесса запоминаем номер потока:
Glo:OneProcess = Start(Browse,25000)
При попытке повторного запуска передаем в поток событие:
Post(Event:GainFocus,,Glo:OneProcess)
Событие в поток приходит - но окно упорно не хочет "всплывать" наверх. Да и если разобраться, то Event:GainFocus - это событие КОГДА окно получает фокус. А как заставить окно получить этот фокус ? Moжет быть есть, что вроде Event:WindowsOnTop ? Чувствую, что запутался в элементарном - заранее спасибо за подсказку !
Код: Выделить всё
для определённой процедуры завожу глобальную не THREAd переменную, например Thread_Proc1
в начале оконной процедуры, после CODE:
IF Thread_Proc1
POST(EVENT:User,,Thread_Proc1)
POPBIND
RETURN
END
Thread_Proc1 = THREAD()
с конце процедуры
Thread_Proc1 = 0
обработка EVENT:User
Window{PROP:Active} = True
усё!
почему не на EVENT:GainFocus, да потому что на нём навешано много логики, например, все Browse перечитываются, а это тебе надо?
Последний раз редактировалось Andrew™ 07 Декабрь 2005, 9:11, всего редактировалось 1 раз.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Re: Опять про всплывающие окна ...
Почти 7 лет прошло как тема закрыта . Хочу поднять.
Передача управления окну срабатывает, но если окно было свернуто и после 0{PROP:Iconize}=FALSE восстановлено в размерах - TOOLBAR не обновляется. TOOLBAR отобразиться только после нажатия на заголовок окна, что вообще неудобно. Желательно сразу. Что делать? Clarion 8.
Передача управления окну срабатывает, но если окно было свернуто и после 0{PROP:Iconize}=FALSE восстановлено в размерах - TOOLBAR не обновляется. TOOLBAR отобразиться только после нажатия на заголовок окна, что вообще неудобно. Желательно сразу. Что делать? Clarion 8.
Re:
Аналогичный код использую давно и никаких проблем. Если бы StillZero напомнил, как эту ситуацию применить к запущенной App (я имею ввиду передачу фокуса на уже запущенное приложение), я ему СКАЖУ...(см. ниже) .StillZero писал(а):на GainFocus повесить надосм. ABCFree -рулятКод: Выделить всё
IF SELF.Opened IF 0{PROP:Iconize}=TRUE 0{PROP:Iconize}=FALSE END IF 0{PROP:Active}<>TRUE 0{PROP:Active}=TRUE END END
Всем пралитарское Спасибо и 'Желаю, чтобы ВСЕ !!!'
Re: Опять про всплывающие окна ...
Самый тупой и ленивый способ - поднять в головном окне DDE-сервер.
Client# = DDEServer('MyProgram',...)
If Client#<>0
DDEExecute(Client#,....) ! Какой-то сигнал
Return
End
Server# = DDEServer('MyProgram',....)
Ну и обработка события
Of Event:DDEExecute
0{Prop:Active} = True
....
Работает...
Client# = DDEServer('MyProgram',...)
If Client#<>0
DDEExecute(Client#,....) ! Какой-то сигнал
Return
End
Server# = DDEServer('MyProgram',....)
Ну и обработка события
Of Event:DDEExecute
0{Prop:Active} = True
....
Работает...
Re: Опять про всплывающие окна ...
Да, спасибо, работает.
Всем пралитарское Спасибо и 'Желаю, чтобы ВСЕ !!!'
Re: Опять про всплывающие окна ...
Естественно, в первой строчке вместо DDEServer надо читать DDEClient