Форум: "Основная";
Текущий архив: 2018.05.20;
Скачать: [xml.tar.bz2];
ВнизЗапрет получения фокуса программой Найти похожие ветки
← →
Focus77 (2010-04-21 16:17) [0]Всем привет!
Как сделать так, чтобы окно программы не принимало фокус при клике на нем? Т.е., например, открыт блокнот и моя программа. В данный момент блокнот является активным окном.
При клике на окошке моей программы фокус должен остаться там где был (без мигания заголовка).
← →
oldman © (2010-04-21 16:38) [1]Form1.Enabled:=false;
:)
← →
Focus77 (2010-04-21 16:45) [2]:) Почти.
Только фокус окна, которое было активно до клика все таки теряется.
Я так предполагаю, что нужно как-то перехватывать WM_KILLFOCUS для чужого окна? Возможно ли это?
← →
oldman © (2010-04-21 16:48) [3]Просто идиотизм какой-то.
А если закрыть блокнот?
А как закрыть твою супер-пупер-программу?
А зачем тогда она вообще нужна на экране? Выведи ее в трей и не выводи оттуда.
← →
Focus77 (2010-04-21 17:02) [4]Не нужно делать поспешных выводов.
Программа реализует экранную клавиатуру для тачскрин экрана.
В качестве примера можно рассмотреть экранную клавиатуру винды (специальные возможности) - она обрабатывает нажатия своих кнопок, но фокус при этом никуда не гуляет.
← →
Юрий Зотов © (2010-04-21 17:16) [5]> Focus77 (21.04.10 16:45) [2]
> нужно как-то перехватывать WM_KILLFOCUS для чужого окна?
Гораздо проще ловить активацию своего окна.
← →
oldman © (2010-04-21 17:22) [6]
> Юрий Зотов © (21.04.10 17:16) [5]
> Гораздо проще ловить активацию своего окна.
Проще, батенька, проще.
Глобальный хук на мышиный клик.
При клике обрабатываем координаты развернутых окон и их перекрытие.
Если клик пришелся таки на суперпуперклаву, обрабатываем событие.
:)))))))))))))))))))))
← →
Focus77 (2010-04-21 17:23) [7]>Гораздо проще ловить активацию своего окна.
Проще. Только нужный результат не достигается.
Прежде чем происходит активация моего окна, происходит деактивация другого. Вот именно эту самую деактивацию и нужно отменить.
← →
Юрий Зотов © (2010-04-21 17:26) [8]
> Focus77 (21.04.10 17:23) [7]
Правильно. Но в сообщении есть хэндл только что деактивированного окна - кто мешает вернуть фокус обратно?
← →
Focus77 (2010-04-21 17:29) [9]
> Правильно. Но в сообщении есть хэндл только что деактивированного
> окна - кто мешает вернуть фокус обратно?
Да-да, я уже прошел через это. Фокус вернуть можно, но:
1. Видно мигание заголовка
2. Если курсор ввода был, например, в адресной строке браузера, то при потере фокуса и обратном его возвращении весь текст в этой строке выделяется.
← →
Focus77 (2010-04-21 17:32) [10]Может действительно попробовать глабальный хук на мышь, т.е. если
PMouseHookStruct(lParam)^.hwnd принадлежит моему окну, то не вызывать следующий обработчик?
← →
Юрий Зотов © (2010-04-21 18:17) [11]Причина вот в чем: не
> Запрет получения фокуса программой [D7, WinXP]
> Focus77 (21.04.10 16:17)
а так: "Запрет получения фокусом программы".
:o)
← →
Leonid Troyanovsky © (2010-04-21 19:06) [12]
> Focus77 (21.04.10 16:17)
> Как сделать так, чтобы окно программы не принимало фокус
> при клике на нем?
WS_EX_NOACTIVATE ?
--
Regards, LVT.
← →
Dimka Maslov © (2010-04-21 20:51) [13]procedure TSomeControl.WMMouseActivate(var Message: TMessage);
begin
Message.Result:=MA_NOACTIVATE;
end;
← →
Focus77 (2010-04-21 22:25) [14]
procedure TSomeControl.WMMouseActivate(var Message: TMessage);
begin
Message.Result:=MA_NOACTIVATE;
end;
Почти, но не совсем то. При клике на моем окошке оба окна становятся неактивными.
> WS_EX_NOACTIVATE ?
>
> --
> Regards, LVT.
Да! То, что нужно!
Всем спасибо за участие и помощь!
Рабочий код (может кому пригодится):
type
TForm1 = class(TForm)
Button1: TButton;
private
{ Private declarations }
procedure CreateParams(var Params: TCreateParams); override;
.....
..
implementation
{$R *.dfm}
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle + WS_EX_NOACTIVATE;
end;
← →
Германн © (2010-04-22 00:53) [15]
> Focus77 (21.04.10 17:02) [4]
>
> Не нужно делать поспешных выводов.
> Программа реализует экранную клавиатуру для тачскрин экрана.
>
> В качестве примера можно рассмотреть экранную клавиатуру
> винды
А зачем тогда своя программа?
← →
brother © (2010-04-22 05:25) [16]> А зачем тогда своя программа?
куча дополнительных кнопок? ;)
← →
Focus77 (2010-04-22 09:03) [17]
> А зачем тогда своя программа?
> куча дополнительных кнопок? ;)
И куча ненужных/опасных кнопок и размер маловат - пальцем не потыкаешь.
← →
Тарас (2011-05-20 06:09) [18]А у меня немножко другая задача. Есть форма, на ней много эдитов и комбобоксов. Надо запретить фокус части этих дочерних окон, так, чтоб на них даже курсор не вставал, а другие дочерние окна должны фокус получать.
← →
Anatoly Podgoretsky © (2011-05-20 10:03) [19]В Интернете достаточное количество рабочих экранных клавиатур!!!
← →
backtheryophag (2013-01-05 14:13) [20]на таймер делаем form1.enabled:=false;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2018.05.20;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.002 c