![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать, что форму перемещают ?
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 (либо не вызываем - тогда сообщение не будет обработано).