![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как не дать юзеру сбить фокус с моего окна? [D6, Win95/98]
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).
Заметьте, как резко начинает усложняться программа. Ради чего?