Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как не дать юзеру сбить фокус с моего окна? [D6, Win95/98]


Страницы:   1 2

Premium ©   (2002-06-29 23:18:00) 

САБЖ


Vitalyfr   (2002-07-07 07:18:00) [1]

А может при закрытии снова запустить прогу ? Тогда не alt - f4 не ctr-alt-del, не помогут.


Юрий Зотов   (2002-06-30 23:52:00) [2]

Не назначен обработчик OnDestroy.


Premium   (2002-06-30 23:42:00) [3]

После закрытия приложения наблюдается оченб интересный эффект:
курсор мыши не выходит зпределы области где находилось окно,
и не вызываются "аккорды".


Юрий Зотов   (2002-06-30 23:29:00) [4]

На правду похоже, но не совсем - задача снимается двойным щелчком по иконке в заголовке формы.

Вероятно, WM_NCLBUTTONDBLCLK все же не хватает. А еще проще обрабатывать только WM_NCHITTEST и возвращать HTCLIENT.


Premium   (2002-06-30 23:27:00) [5]

:)))))


Anatoly Podgoretsky   (2002-06-30 23:26:00) [6]

А скобка где? [


SPeller   (2002-06-30 23:26:00) [7]

2 Premium © (30.06.02 23:19)

Что пишет?


SPeller   (2002-06-30 23:24:00) [8]

Правда можно вызвать системное меню, в котором выбрать Переместить и накроется весь ClipCursor. Тогда либо в свойствах фомы убираем параметр biSystemMenu либо отлавливаем (не через хуки!!! :)) нажание клавиши Alt и F10:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key in [121,18] then key:=0;
end;


При этом для надёжности в свойство OnKeyUp надо тоже поставить эту процедуру.


Pat   (2002-06-30 23:22:00) [9]

>Premium © ушло на hir@ukr.net


Premium   (2002-06-30 23:19:00) [10]

Ругается на эту строку:
if (msg.hwnd=handle)and(msg.message in WM_NCLBUTTONDOWN,WM_NCLBUTTONUP,
WM_NCRBUTTONDOWN,WM_NCRBUTTONUP]) then handled:=true;


SPeller   (2002-06-30 23:03:00) [11]

Ну и в добавку: "запрещаем" Alt+F4 и закрываем окно только по нажатию на кнопку на форме.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if tag=0 then canclose:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
tag:=1;
close;
end;


SPeller   (2002-06-30 22:57:00) [12]

Очепяточка маленькая:
if (msg.hwnd=handle)and(msg.message in [WM_NCLBUTTONDOWN,WM_NCLBUTTONUP,...


SPeller   (2002-06-30 22:56:00) [13]

Господа, вот вам РЕАЛЬНЫЙ пример, только что проверял:

procedure TForm1.FormCreate(Sender: TObject);
var rc:trect;
begin
SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,nil,0);
rc:=rect(left,top,left+width,top+height);
ClipCursor(@rc);
Application.OnMessage:=MessageHandler;
end;

procedure TForm1.MessageHandler(var Msg: TMsg; var Handled: Boolean);
begin
if (msg.hwnd=handle)and(msg.message in WM_NCLBUTTONDOWN,WM_NCLBUTTONUP,
WM_NCRBUTTONDOWN,WM_NCRBUTTONUP]) then handled:=true;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,nil,0);
ClipCursor(nil);
end;


Объясняю что к чему. Во-первых, SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,nil,0) запрещает ВСЕ виндовые клавиши (Alt+Ctrl+Del, Alt+Tab, Alt+Esc, Ctrl+Esc b т.д.). Во-вторых, ClipCursor(@rc) запрещает передвижение указателя мыши дальше пределов формы. В третьих, Application.OnMessage:=MessageHandler назначаем обработчик всех сообщений для формы и приложения. В нём определяем, нашему ли окну отправлено сообщение и есть ли сообщение среди тех, которые фильтруем. Отлавливаем те, которые могут инициировать перемещение окна, из-за чего ClipCursor теряет своё действие и отсечение курсора надо ставить заново. В добавок, невозможно закрыть окно на "крестик", только по Alt+F4. Ну вот в принципе и всё, и никаких вам хуков.


Premium   (2002-06-30 22:46:00) [14]

Я говорю про "аккорды". А вот дальше я и пришел на форум...


Юрий Зотов   (2002-06-30 22:43:00) [15]

И что? Ну скрыли Вы свой процесс, что дальше? Кто помешает мне войти в главное меню, что угодно оттуда запустить и в него переключиться? Не вводя никаких паролей.


Premium   (2002-06-30 22:40:00) [16]

Вот как я справлялся с клавиатурой:

SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);


Юрий Зотов   (2002-06-30 22:37:00) [17]

> ... ClipCursor и всё.

Нажимаю Alt+Tab. Или Ctrl+Esc. И спокойно запускаю что угодно и во что угодно переключаюсь. И чихать мне на ClipCursor вместе с мышью.


Premium   (2002-06-30 22:28:00) [18]

to Юрий Зотов
Для ощущения собственной значительности.

С клавиатурой проблем нет, а вот банальным щелчком мыши вне окна портится это самое ощущение:((((

to Pat
Если вас не затруднит.


SPeller   (2002-06-30 22:27:00) [19]

2 Юрий Зотов © (30.06.02 22:21)

Какие хуки?? :) Гемору то сколько. SPeller © (30.06.02 22:15). А если не надо чтобы во весь экран, то ClipCursor и всё. Делов то.


Юрий Зотов   (2002-06-30 22:21:00) [20]

Можно - поставить глобальный хук на мышь. Но остается еще клавиатура, на которую тоже придется ставить глобальный хук. И есть еще замечательные аккорды Alt+Tab и Ctrl+Esc (клавиша Win).

Заметьте, как резко начинает усложняться программа. Ради чего?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо