Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-34978
Knight
2003-05-25 23:03
2003.06.12
Как сделать эффект 25-го кадр?


9-34665
Ricks
2002-12-30 14:08
2003.06.12
Вопрос к знатокам Direct3D


14-35050
mox
2003-05-27 20:48
2003.06.12
Перезагрузка Windows


1-34822
Mishenka
2003-06-01 23:00
2003.06.12
Как в OpenDialog запретить смену каталога?


4-35118
Delphi5.01
2003-04-12 22:53
2003.06.12
Komponent CreateWnd, Create





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский