Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.29;
Скачать: CL | DM;

Вниз

Запретить перемещение окна зная его 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.006 c
15-1324712185
Pavia
2011-12-24 11:36
2012.04.29
Ошибка c памятью


15-1324626136
Gu
2011-12-23 11:42
2012.04.29
Пылесос


2-1325419670
elizaveta1541
2012-01-01 16:07
2012.04.29
Сохранение текстовых строк, введённых в RichEdit в файле


11-1243010637
MTsv DN
2009-05-22 20:43
2012.04.29
Build и Compile


15-1324585802
Юрий
2011-12-23 00:30
2012.04.29
С днем рождения ! 23 декабря 2011 пятница