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

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

Запретить перемещение окна зная его 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() - и окно поедет туда куда ему сказано.

Вот и облажались эти "вездеписатели"


Наверх

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