![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить потерю фокуса у формы
[e]Bu$ter © (2006-09-12 13:58:00)Господа, подскажите пожалуйста, как отловить и обработать сообщение о потере фокуса у формы.
Форма без заголовка и пользователь иногда не видит, что у неё забрали фокус, и продолжает жать клавиши попутно обхаивая программу за то, что она его не слушается :(
Вопрос скорее всего детский, просто в VCL у меня всё работало... а когда помню с KOL пробовал, так челый час возился, но ничего в итогде и не получилось. Сейчас проблема снова всплыла, нужно побороть.
[e]Bu$ter (2006-09-13 12:24:00) [1]Круто, половина задачи решена! Большое спасибо, MTsv DN.
Однако, вторая половина: как вернуть фокус окну?
Перепробывал:
form.BringToFront;
SetFocus(form.Handle);
BringWindowToTop(form.Handle);
SetActiveWindow(form.Handle);
и даже
SetForegroundWindow(form.Handle);
но увы, фокус не возврашается :(
Т.е. я ткну мимо окна мышью, оно пищит, но фокус обратно себе не берёт. Может есть ещё какие-то способы кроме опробованных выше?
Но мне кажется, что хоть один из них да должен был сработать, но почему-то не работает... Может кто-то знает почему? (напомню, окно без заголовка, если это существенно)
MTsv DN (2006-09-13 09:11:00) [2]2 [e]Bu$ter
> Господа, подскажите пожалуйста, как отловить и обработать
> сообщение о потере фокуса у формы.
function TForm1.KOLForm1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
Result := false;
if Msg.message = WM_KILLFOCUS then
if GetActiveWindow <> Form.Handle then
beep(400,100);
end;
2 parovoZZ
> Как средствами KOL - не знаю.
Пардон, а какими знаешь???
С Уважением MTsv DN
parovoZZ (2006-09-12 22:12:00) [3]Мессага такая есть wm_Activate
Есть ещё функция GetActiveWindow
Как средствами KOL - не знаю.