Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.12;
Скачать: CL | DM;

Вниз

Обработка сообщения WM_MOVE   Найти похожие ветки 

 
pvasya   (2003-05-30 10:18) [0]

Хочется добиться того, чтобы форму нельзя было выдвинуть за пределы экрана...
Перехватываю сообщение WM_MOVE

procedure TForm1.MoveForm(var M:TWMMove);
begin
if (orm1.left<=0) and (Form1.top<=0) then
begin
// какой код здесь надо написать чтобы сообщение
// не передавалось и не обрабатывалось ОС
end
else
inherited;
end;

или предложите свой вариант.


 
Skier ©   (2003-05-30 10:21) [1]

WM_MOVING


 
pvasya   (2003-05-30 10:24) [2]

хорошо, а как забить сообщение и не передавать ОС?


 
Skier ©   (2003-05-30 10:28) [3]

>pvasya (30.05.03 10:24)
Не надо ничего "забивать" !
Нужно лишь правильно (с учётом твоей задачи) его обработать.

Ну а в общем случае чтобы "забить" нужно просто не писать
слово inherited; Но это может быть очень опасно !


 
Дмитрий Баранов ©   (2003-05-30 10:30) [4]

Message.Result := 0 (или false, не помню)


 
pvasya   (2003-05-30 10:33) [5]

Тоесть берем и меняем в заголовке TWMMove -> TWMMoving и все?
Подскажи, как именно с учетом моей задачи, правильно обработать это сообщение?


 
Skier ©   (2003-05-30 10:35) [6]

>pvasya (30.05.03 10:33)
Справку по этому сообщению почитай (WinAPI)...Там всё прозрачно...


 
pvasya   (2003-05-30 10:53) [7]

что-то до меня не доходит как можно им воспользоваться в моей проблеме. итак, я пользовался сообщением WM_WINDOWPOSCHANGING
и при выходе окна за пределы десктопа я возвращал параметры left and top в нуль. но при этом форма прыгает.
как избавиться от прыжков?


 
Skier ©   (2003-05-30 10:58) [8]

>pvasya (30.05.03 10:53)
Код.


 
pvasya   (2003-05-30 11:07) [9]

WM_WINDOWPOSCHANGED, WM_WINDOWPOSCHANGING не помогли мне.

остановился на этом варианте:

procedure TFlyWindow.WMMoving(var M:TWMMove);
begin
inherited;
if (FlyWindow.left<=0) or (FlyWindow.top<=0) then
begin
//
//
FlyWindow.Left:=0;
end;


end;


 
Skier ©   (2003-05-30 11:14) [10]

>pvasya (30.05.03 11:07)
Мда...Справку ты видимо даже и не смотрел. Грустно всё это...


 
pvasya   (2003-05-30 11:21) [11]

смотрел конечно, я не знаю, не понимаю как мне воспользоваться тем сообщением WM_MOVING

wSide = wParam; // edge of window to be moved
lprc = (LPRECT) lParam; // screen coordinates of drag rectangle


Parameters

fwSide

Value of wParam. Indicates which edge of the window is being moved. This parameter can be a combination of the following values:

Value Meaning
WMSZ_BOTTOM Bottom edge
WMSZ_BOTTOMLEFT Bottom-left corner
WMSZ_BOTTOMRIGHT Bottom-right corner
WMSZ_LEFT Left edge
WMSZ_RIGHT Right edge
WMSZ_TOP Top edge
WMSZ_TOPLEFT Top-left corner
WMSZ_TOPRIGHT Top-right corner

что с ним делать?


 
Skier ©   (2003-05-30 11:32) [12]

>pvasya (30.05.03 11:21)

lprc = (LPRECT) lParam; // screen coordinates of drag rectangle - вот то что тебе нужно...

type
PRect = ^TRect;

procedure TFlyWindow.WMMoving(var Msg : TMessage);
begin
//..............
with PRect(Msg.LParam)^ do begin
end; //with
//..............
end;


 
pvasya   (2003-05-30 11:38) [13]

спасибо, вот моя реализация.
procedure TFlyWindow.WMMoving(var M:TWMMoving);
begin
if M.DragRect.Left<0 then
begin
M.DragRect.TopLeft.X:=0;
M.DragRect.Right:=FlyWindow.Width;
end;
if M.DragRect.Top<0 then
begin
M.DragRect.TopLeft.Y:=0;
M.DragRect.Bottom:=FlyWindow.Height;
end;
inherited;
end;



Страницы: 1 вся ветка

Текущий архив: 2003.06.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
14-35077
Mirovodin
2003-05-28 11:14
2003.06.12
Лазерное шоу в СПб - мнения.


9-34662
NailMan
2002-07-12 04:40
2003.06.12
Реинициализация Direct3D внутри программы


6-34956
xShadow
2003-04-09 11:09
2003.06.12
Вопрос по поводу закачки файла из инета??


14-35046
k-sergey
2003-05-26 13:14
2003.06.12
Склеить Wav-ки


14-35049
Кен
2003-05-13 02:42
2003.06.12
Что такое сценарий в игре ? Всего-лишь разбросанные где попало