![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запретить перемещение окна зная его handle
Валерий © (2012-01-03 14:57:00)Добрый день
Как, зная handle окна, запретить его перемещение? Везде пишут что нужно отследить нажатие на HCAPTION окна и не обрабатывать это сообщение. Но как это реализовать?
Юрий Зотов (2012-01-03 16:59:00) [1]
> Валерий (03.01.12 16:52) [9]
Но годится он не для любого окна.
Валерий (2012-01-03 16:52:00) [2]Спасибо, то что нужно
Юрий Зотов (2012-01-03 16:22:00) [3]
> Валерий (03.01.12 15:55) [5]
> а если окно другой программы?
Попробуйте так (способ простой, хотя и не лучший):
procedure DisableMovingAndResizing(Wnd: HWND);
var
H: HMENU;
begin
H := GetSystemMenu(Wnd, False);
DeleteMenu(H, 1, MF_BYPOSITION); // Переместить
DeleteMenu(H, 1, MF_BYPOSITION) // Размер
end;
Dimka Maslov (2012-01-03 16:18:00) [4]
> если окно другой программы?
Хук поставить?
Юрий Зотов (2012-01-03 15:56:00) [5]> Валерий (03.01.12 15:54) [3]
> Нужно просто запретить перемещение окна при помощи МЫШКИ
А что мешает переместить его с клавиатуры?
Юрий Зотов (2012-01-03 15:55:00) [6]> Валерий (03.01.12 14:57)
> Везде пишут что нужно отследить нажатие на HCAPTION
> окна и не обрабатывать это сообщение.
Окно можно переместить не только мышкой. Поэтому - если надо запретить перемещение, так именно перемещение и надо запрещать, а не клики по заголовку блокировать.
Валерий (2012-01-03 15:55:00) [7]Юрий Зотов © (03.01.12 15:50) [2]
type
TForm1 = class(TForm)
protected
procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
end;
procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
inherited;
with Message.WindowPos^ do
flags := flags or SWP_NOMOVE // еще можно добавить: or SWP_NOSIZE
end;
Это если окно твое :) а если окно другой программы?
Валерий (2012-01-03 15:54:00) [8]Нужно просто запретить перемещение окна при помощи МЫШКИ. Пользователи "хакерить" с окнами через MoveWindow() точно не будут.
Юрий Зотов (2012-01-03 15:50:00) [9]
type
TForm1 = class(TForm)
protected
procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
end;
procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
inherited;
with Message.WindowPos^ do
flags := flags or SWP_NOMOVE // еще можно добавить: or SWP_NOSIZE
end;
Сергей М. (2012-01-03 15:32:00) [10]> Везде пишут что нужно отследить нажатие
А я вот ни на какие HCAPTION нажимать не буду, у меня даже "нажималки" нет. Я просто возьму да скажу - MoveWindow() - и окно поедет туда куда ему сказано.
Вот и облажались эти "вездеписатели"