|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.05.2009, 23:04 | #1 |
Форумчанин
Регистрация: 03.10.2008
Сообщений: 180
|
Как узнать что твоя программа потеряла фокус?
Как узнать что твоя программа потеряла фокус, когда пользователь переключается на какое-нибудь другое приложение (onDeactivate не подходит, программа имеет много окон, которые одновременно могут быть открыты)? И в результате этого программа должна выполнять какое-то действие (код).
лучший подарок женщине-программисту
|
07.05.2009, 00:43 | #2 |
Участник клуба
Регистрация: 28.11.2007
Сообщений: 1,521
|
Можете использовать функцию GetForegroundWindow.
Но лучше всего делать так: Код:
Всегда рад помочь!
Последний раз редактировалось Terran; 07.05.2009 в 02:18. |
07.05.2009, 10:04 | #3 |
Форумчанин
Регистрация: 03.10.2008
Сообщений: 180
|
Спасибо, но это немного не то. Что если в приложении много окон и мы переходим от одного к другому, то будет постоянно выполняться этот код в зависимости от того, к какмому окну мы его припишем. Нужно отлавливать событие, когда фокус переводится на другое открытое приложение (в т.ч. рабочий стол, меню и панель пуск), а не окно нашего приложения. И в этом случае выполнять определенный код. Ведь можно так?
лучший подарок женщине-программисту
|
07.05.2009, 10:26 | #4 |
Форумчанин
Регистрация: 22.02.2009
Сообщений: 875
|
Это должно помочь:
Код:
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
|
28.07.2009, 13:41 | #5 |
Пользователь
Регистрация: 11.07.2009
Сообщений: 90
|
как постоянно держать программу активной?? То есть чтобы фокус с нее не уходил?? Или при потере фокуса возвращать его обратно на главное окно программы (программа однооконная)??
BringToFront подходит???
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64 Vertrigo Последний раз редактировалось regman; 28.07.2009 в 13:49. |
28.07.2009, 14:08 | #6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
28.07.2009, 14:13 | #7 |
Заблокирован
Регистрация: 18.11.2007
Сообщений: 254
|
а это разве в этом разделе надо было писать? тут раздел про апи функции виндовса.
|
28.07.2009, 14:29 | #8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
28.07.2009, 16:30 | #9 |
Пользователь
Регистрация: 11.07.2009
Сообщений: 90
|
не работает принудительный фокус с предыдущим примером... Окно то остается спереди, но оно не активно.
private Procedure SetMainFocus(Var Mess : TMessage); Message WM_ACTIVATEAPP; ........................ procedure TForm1.SetMainFocus(Var Mess : TMessage); begin If Mess.wParam = WA_INACTIVE Then SetForegroundWindow(Form1.Handle); End;
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64 Vertrigo |
05.08.2009, 23:02 | #10 |
Пользователь
Регистрация: 11.07.2009
Сообщений: 90
|
есть код таймера, который стартует при запуске программы (однооконной).
OnTimer: var hc: hwnd; begin hc:=GetForegroundWindow; if hc <> hw then SetForegroundWsndow(hw); end; OnCreate: hw:=Form1.Handle; Тоесть сравниваем хэндл главной формы и хэндл текущий. Задача та же - держать прогу под фокусом поверх всех остальных приложений. Проблема - функция SetForegroundWsndow(hw) срабатывает первый раз нормально, а последующие нет, а именно - если теряется фокус целевой программы (например клик мышкой по фоновой программе), то во второй раз окно не становится активным, а только мигает на панели задач, а сам фокус остается на только что кликнувшей программе. Вопрос - почему не работает?? Я так понял изменяется еще кое-что в программе при потере фокуса, а что именно я не знаю.
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64 Vertrigo |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
WebBrowser как узнать что страница полностью догрузилась | Comer_Jus | Работа с сетью в Delphi | 6 | 01.07.2011 09:46 |
Как узнать деректорию откуда запущена программа? | dolphin705 | Общие вопросы Delphi | 4 | 22.03.2009 19:32 |
Как на JavaScript узнать, что пользователь закрыл окно? | Laziz | JavaScript, Ajax | 1 | 22.02.2009 21:16 |
DLL!!!Как узнать что PUSH-ит!!! | Kuznecov | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 10.02.2009 22:04 |
Как узнать что в комп вставили флешку? | Alex.rus | Помощь студентам | 5 | 27.09.2008 17:30 |