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

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

Как узнать, что форму перемещают ?


Miau ©   (2004-01-23 19:58:00) 

Хочется не дать форме уйти за пределы некоего прямоугольника, т.е. не дать пользователю мышью перетащить её куда не следует.


Miau   (2004-01-23 22:35:00) [1]

Ещё раз спасибо. Это как раз то, что нужно. Мышь, конечно, непривычно себя ведёт, но это уже другая история :)


Юрий Зотов   (2004-01-23 22:16:00) [2]

type
 TForm1 = class(TForm)
 private
   procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
   procedure WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
 end;

implementation

const
 Margin = 100; // Недоступная рамка по краям экрана

procedure TForm1.WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
// Это ограничивает разворачивание формы
begin
 with Message.MinMaxInfo^, Screen do
 begin
   ptMaxSize := Point(Width - 2 * Margin, Height - 2 * Margin);
   ptMaxPosition := Point(Margin, Margin)
 end;
 inherited
end;

procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging);
// Это ограничивает перемещение формы и изменение ее размеров
begin
 with Message.WindowPos^, Screen do
 begin
   if CX > Width - 2 * Margin then CX := Width - 2 * Margin;
   if CY > Height - 2 * Margin then CY := Height - 2 * Margin;
   if X < Margin then X := Margin;
   if X + CX > Width - Margin then X := Width - Margin - CX;
   if Y < Margin then Y := Margin;
   if Y + CY > Height - Margin then Y := Height - Margin - CY
 end;
 inherited
end;


Miau   (2004-01-23 20:45:00) [3]

Спасибо!
Если Вам не трудно, не могли бы Вы набросать примерчик небольшой? Хотя бы пару основных строк, а то я с сообщениями толком не сталкивался.


Юрий Зотов   (2004-01-23 20:31:00) [4]

WM_WINDOWPOSCHANGING

В структуре WINDOWPOS проверяем и корректируем координаты (либо выставляем флаг SWP_NOMOVE), потом вызываем inherited (либо не вызываем - тогда сообщение не будет обработано).


Наверх

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