Главная страница
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.008 c
15-1324931403
Юрий
2011-12-27 00:30
2012.04.29
С днем рождения ! 27 декабря 2011 вторник


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


15-1324623216
Faceless
2011-12-23 10:53
2012.04.29
информация об используемых библиотеках


15-1324549390
Раммер
2011-12-22 14:23
2012.04.29
Посоветуйте книжку по SQL.


15-1324500669
Nic
2011-12-22 00:51
2012.04.29
Покритикуйте дизайн