Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1325325464
Gu
2011-12-31 13:57
2012.04.29
simplesharemem


2-1325420142
elizaveta1541
2012-01-01 16:15
2012.04.29
Использование кнопки Закрытия на главной форме


15-1324333863
Германн
2011-12-20 02:31
2012.04.29
А вот почему на звуковых картах до сих пор один выход?


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


15-1321709041
Sergey Masloff
2011-11-19 17:24
2012.04.29
Знатокам регулярных выражений





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский