Форум: "Основная";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];
ВнизОбработка сообщения 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c