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


2-1325763307
Scott Storch
2012-01-05 15:35
2012.04.29
использование оператора goto


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


15-1323231309
Skyle
2011-12-07 08:15
2012.04.29
Ищу новых коллег (г. Новосибирск).


2-1325688285
Scott Storch
2012-01-04 18:44
2012.04.29
обрезаются символы при назначении значения полю