Главная страница
    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.013 c
4-35103
Clickmaker
2003-04-13 17:28
2003.06.12
Удаление ключа из HKEY_CLASSES_ROOT без прав админа


1-34786
АлексейК
2003-06-02 08:28
2003.06.12
Использование DLL созданной в D7 для D5


1-34861
Flex
2003-05-31 10:41
2003.06.12
/ Помогите с Use debug DCUs /


6-34950
Маришка
2003-04-10 07:48
2003.06.12
как узнать, что определенный компьютер находиться в сети.


8-34945
faf
2003-03-01 01:03
2003.06.12
Проигрывание XM , MOD files





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