Как отловить событие переключения на мою программу?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Как отловить событие переключения на мою программу?

Сообщение kreator »

Допустим, запущена моя программа. Пользователь переключился на другую, потом вернулся обратно, на мою. Можно ли отловить это событие? На окне, во фрейме, не важно.
We are hard at work… for you. :)
olegnabclw
Новичок
Сообщения: 20
Зарегистрирован: 24 Февраль 2012, 8:33

Re: Как отловить событие переключения на мою программу?

Сообщение olegnabclw »

a event:gainfocus не срабатывает ?
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как отловить событие переключения на мою программу?

Сообщение kreator »

Не срабатывает, потому что EVENT:GainFocus отслеживает переключение между тредами. А здесь тред не меняется.
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Как отловить событие переключения на мою программу?

Сообщение Дед Пахом »

похоже что надо сабклассить каждое окно и ловить WM_ACTIVATEAPP
С уважением, ДП
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Как отловить событие переключения на мою программу?

Сообщение Yufil »

Нет, не переключение тредов, а именно восстановление активности текущего окна
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как отловить событие переключения на мою программу?

Сообщение kreator »

А что такое "восстановление активности текущего окна". Мне бы не хотелось использовать Timer. По таймеру я все свои проблемы решу. Просто может есть более красивый вариант?
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Как отловить событие переключения на мою программу?

Сообщение Yufil »

Ну, например, если я хочу из окна открыть документ (например, таблицу Ёксель), она зачастую может убежать на задний план
Поэтому приходится прикрывать текущее окно временным, открывать (на OpenWindow) документ, ждать сначала LoseFocus, потом GainFocus.
Как только дождались - временное окно закрывается - и вперёд... Правда, таймер там всё равно юзается :(
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как отловить событие переключения на мою программу?

Сообщение kreator »

Решил так. Есть FrameExtension Template и соответствующий класс. В нём как раз обработка WM_ACTIVATEAPP, но только обработка потери фокуса, добавил внутрь класса обработку принятия фокуса. Всё пошло.
Теперь следующая заморочка. На планшете запускаю как десктопное приложение. Переключаюсь на 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).
Это я только кажусь дураком! На самом деле я полный идиот!
olegnabclw
Новичок
Сообщения: 20
Зарегистрирован: 24 Февраль 2012, 8:33

Re: Как отловить событие переключения на мою программу?

Сообщение olegnabclw »

ничего не работает в данном случае - ни prop:active, ни gainfocus,
только внутри приложения :(
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как отловить событие переключения на мою программу?

Сообщение kreator »

Ну да, что даст prop:Active? В таймере отслеживать стало ли активно окно? Ещё и переменную держать, которая отслеживает стало ли окно не активным. Мне же надо только событие получения фокуса. В общем, класс FrameExtension правильно решает нужную задачу. Причём он может сворачивать приложение в трей с возможностью показа подсказки (Tip), разворачивать из трея, правильно закрывать приложение при выключении компа. Единственное, что правильной описалки класса в хелпе нет.
We are hard at work… for you. :)
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2584
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Re: Как отловить событие переключения на мою программу?

Сообщение Губин Игорь »

Каждый выбирает по себе (С) За советскую власть агитировать не буду.
Это я только кажусь дураком! На самом деле я полный идиот!
Ответить