Как отловить событие переключения на мою программу?
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Как отловить событие переключения на мою программу?
Допустим, запущена моя программа. Пользователь переключился на другую, потом вернулся обратно, на мою. Можно ли отловить это событие? На окне, во фрейме, не важно.
We are hard at work… for you. 

-
- Новичок
- Сообщения: 20
- Зарегистрирован: 24 Февраль 2012, 8:33
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Как отловить событие переключения на мою программу?
Не срабатывает, потому что EVENT:GainFocus отслеживает переключение между тредами. А здесь тред не меняется.
We are hard at work… for you. 

- Дед Пахом
- Старичок
- Сообщения: 3289
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Re: Как отловить событие переключения на мою программу?
похоже что надо сабклассить каждое окно и ловить WM_ACTIVATEAPP
С уважением, ДП
Re: Как отловить событие переключения на мою программу?
Нет, не переключение тредов, а именно восстановление активности текущего окна
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Как отловить событие переключения на мою программу?
А что такое "восстановление активности текущего окна". Мне бы не хотелось использовать Timer. По таймеру я все свои проблемы решу. Просто может есть более красивый вариант?
We are hard at work… for you. 

Re: Как отловить событие переключения на мою программу?
Ну, например, если я хочу из окна открыть документ (например, таблицу Ёксель), она зачастую может убежать на задний план
Поэтому приходится прикрывать текущее окно временным, открывать (на OpenWindow) документ, ждать сначала LoseFocus, потом GainFocus.
Как только дождались - временное окно закрывается - и вперёд... Правда, таймер там всё равно юзается
Поэтому приходится прикрывать текущее окно временным, открывать (на OpenWindow) документ, ждать сначала LoseFocus, потом GainFocus.
Как только дождались - временное окно закрывается - и вперёд... Правда, таймер там всё равно юзается

-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Как отловить событие переключения на мою программу?
Решил так. Есть FrameExtension Template и соответствующий класс. В нём как раз обработка WM_ACTIVATEAPP, но только обработка потери фокуса, добавил внутрь класса обработку принятия фокуса. Всё пошло.
Теперь следующая заморочка. На планшете запускаю как десктопное приложение. Переключаюсь на Modern интерфейс, включаю камеру. Потом переключаюсь обратно на десктоп (если провести пальцем по экрану слева к центру). И... Ни одно запущенное в десктопе приложение не становится активным, активным становится сам десктоп что-ли. Т.е. надо дотронуться до экрана, чтобы приложение стало активным. Народ, кто уже поработал с планшетами, это виндусовая фича? Или где-то всё-таки настройка есть?
Теперь следующая заморочка. На планшете запускаю как десктопное приложение. Переключаюсь на Modern интерфейс, включаю камеру. Потом переключаюсь обратно на десктоп (если провести пальцем по экрану слева к центру). И... Ни одно запущенное в десктопе приложение не становится активным, активным становится сам десктоп что-ли. Т.е. надо дотронуться до экрана, чтобы приложение стало активным. Народ, кто уже поработал с планшетами, это виндусовая фича? Или где-то всё-таки настройка есть?
We are hard at work… for you. 

- Губин Игорь
- Шубуршун
- Сообщения: 2584
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Re: Как отловить событие переключения на мою программу?
А попроще низя?
PROP:Active
A WINDOW, SYSTEM or IMAGE property. If the target is a WINDOW, PROP:Active returns 1 if the window is the active window, blank if not. Set to 1 to make the top window of a thread the active window.
If the SYSTEM variation is used, SYSTEM{Prop:Active} returns the number of active thread.
Setting PROP:Active to TRUE for an IMAGE control (runtime only) makes it active: it can be a parent/child of other controls and is painted separately without caching into the metafile of the owner window's background (i.e.,IMAGE controls with scroll bars).
Это я только кажусь дураком! На самом деле я полный идиот!
-
- Новичок
- Сообщения: 20
- Зарегистрирован: 24 Февраль 2012, 8:33
Re: Как отловить событие переключения на мою программу?
ничего не работает в данном случае - ни prop:active, ни gainfocus,
только внутри приложения
только внутри приложения

-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Как отловить событие переключения на мою программу?
Ну да, что даст prop:Active? В таймере отслеживать стало ли активно окно? Ещё и переменную держать, которая отслеживает стало ли окно не активным. Мне же надо только событие получения фокуса. В общем, класс FrameExtension правильно решает нужную задачу. Причём он может сворачивать приложение в трей с возможностью показа подсказки (Tip), разворачивать из трея, правильно закрывать приложение при выключении компа. Единственное, что правильной описалки класса в хелпе нет.
We are hard at work… for you. 

- Губин Игорь
- Шубуршун
- Сообщения: 2584
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Re: Как отловить событие переключения на мою программу?
Каждый выбирает по себе (С) За советскую власть агитировать не буду.
Это я только кажусь дураком! На самом деле я полный идиот!