Форум: "Начинающим";
Текущий архив: 2012.04.29;
Скачать: [xml.tar.bz2];
ВнизЗапретить перемещение окна зная его handle Найти похожие ветки
← →
Валерий (2012-01-03 14:57) [0]Добрый день
Как, зная handle окна, запретить его перемещение? Везде пишут что нужно отследить нажатие на HCAPTION окна и не обрабатывать это сообщение. Но как это реализовать?
← →
Сергей М. © (2012-01-03 15:32) [1]> Везде пишут что нужно отследить нажатие
А я вот ни на какие HCAPTION нажимать не буду, у меня даже "нажималки" нет. Я просто возьму да скажу - MoveWindow() - и окно поедет туда куда ему сказано.
Вот и облажались эти "вездеписатели"
← →
Юрий Зотов © (2012-01-03 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) [3]Нужно просто запретить перемещение окна при помощи МЫШКИ. Пользователи "хакерить" с окнами через MoveWindow() точно не будут.
← →
Юрий Зотов © (2012-01-03 15:55) [4]> Валерий (03.01.12 14:57)
> Везде пишут что нужно отследить нажатие на HCAPTION
> окна и не обрабатывать это сообщение.
Окно можно переместить не только мышкой. Поэтому - если надо запретить перемещение, так именно перемещение и надо запрещать, а не клики по заголовку блокировать.
← →
Валерий (2012-01-03 15:55) [5]Юрий Зотов © (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:56) [6]> Валерий (03.01.12 15:54) [3]
> Нужно просто запретить перемещение окна при помощи МЫШКИ
А что мешает переместить его с клавиатуры?
← →
Dimka Maslov © (2012-01-03 16:18) [7]
> если окно другой программы?
Хук поставить?
← →
Юрий Зотов © (2012-01-03 16:22) [8]
> Валерий (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;
← →
Валерий (2012-01-03 16:52) [9]Спасибо, то что нужно
← →
Юрий Зотов © (2012-01-03 16:59) [10]
> Валерий (03.01.12 16:52) [9]
Но годится он не для любого окна.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.04.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c