Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1462800607
dmk
2016-05-09 16:30
2018.05.20
Угловые квадранты


2-1463377126
selfi
2016-05-16 08:38
2018.05.20
Не ясная работа страницы в TWebbrowser


11-1267173617
QAZ
2010-02-26 11:40
2018.05.20
SortData + Tlist


1-1271852224
Focus77
2010-04-21 16:17
2018.05.20
Запрет получения фокуса программой


2-1463295307
lewka
2016-05-15 09:55
2018.05.20
Работа с компонентам Chromium





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский