Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Событие на перемещение формы


Автор: Mpak 8.4.2008, 08:49
В общем то сабж smile
Просто не могу понять.. как это событие обозвали?
Координаты хочу получить текущие, и потом установить новые smile

Автор: PPS05 8.4.2008, 11:48
Стандартно не реализовано. В WinApi существуют сообщения мыши WM_NCMOUSEMOVE, WM_NCMOUSEDOWN - может поможет. А вот событий именно для перемещения окна я не знаю.

Автор: mrbrooks 8.4.2008, 12:10
WM_WINDOWPOSCHANGING (возникает перед перемещением), 
WM_WINDOWPOSCHANGED (возникает после перемещения), или 
WM_MOVE (возникает после перемещения)

Автор: korian 8.4.2008, 12:46
на OnResize поидее надо вешаться

Автор: mrbrooks 8.4.2008, 12:50
Вдогонку что бы особо башку не ломал:

в классе формы 
Код

unit1.h
......
private:
.....
void __fastcall FormMove(TWMMove &msg);
BEGIN_MESSAGE_MAP
      MESSAGE_HANDLER(WM_MOVE, TWMMove, FormMove)
END_MESSAGE_MAP(TForm)
.....



Код

unit1.cpp
....
void __fastcall TForm1::FormMove(TWMMove &msg);
{
Caption = String(msg.XPos) +":" + String(msg.YPos);
}
.....


с остальными сообщениями работать по тойже технологии

Добавлено через 2 минуты и 46 секунд
Цитата(korian @ 8.4.2008,  12:46)
на OnResize поидее надо вешаться

Это только по идеи имхо. Я даже боюсь представить какой будет алгоритм  smile 
Уж если чуваки из M$ подарили нам стандартные обработчики событий лучше их юзать. smile 

Автор: Mpak 8.4.2008, 17:16
Всем спасибо, пошел пробовать smile

Автор: Mpak 12.4.2008, 16:34
Спасибо, все замечательно работает! smile 
опечатка в 3-й строке. в конце не надо ";", это же уже *.cpp файл  smile 
Цитата(mrbrooks @  8.4.2008,  15:50 Найти цитируемый пост)
Код

unit1.cpp
....
void __fastcall TForm1::FormMove(TWMMove &msg);
{
Caption = String(msg.XPos) +":" + String(msg.YPos);
}
.....

с остальными сообщениями работать по тойже технологии


Автор: mrbrooks 12.4.2008, 16:53
Цитата(Mpak @ 12.4.2008,  16:34)
Спасибо, все замечательно работает! smile 
опечатка в 3-й строке. в конце не надо ";", это же уже *.cpp файл  smile 
Цитата(mrbrooks @  8.4.2008,  15:50 Найти цитируемый пост)
Код

unit1.cpp
....
void __fastcall TForm1::FormMove(TWMMove &msg);
{
Caption = String(msg.XPos) +":" + String(msg.YPos);
}
.....

с остальными сообщениями работать по тойже технологии

Точно. Вот что копи-паст творит  smile 

Автор: iilisav 19.3.2009, 16:30
Здравствуйте!
Делаю как указано в примере выше, компилируется нормально, но при запуске выдает ACCESS VIOLATION на строчке MESSAGE_HANDLER(WM_MOVE, TWMMove, FormMove) подскажите пожалуйста в чём тут дело? Заранее спасибо.

Добавлено через 1 минуту и 54 секунды
К выше указаному примеру добавлял только 

void __fastcall TForm1::FormMove(TWMMove &msg);
{

   Caption = String(msg.XPos) +":" + String(msg.YPos);
   frmTestForWork->Top = frmMain->Top + 67;
   frmTestForWork->Left = frmMain->Left + 5;

}

Автор: Domain 25.4.2010, 12:19
а как например при перемещении в этот момент сделать окно полупрозрачным, а потом вернуть его в нормальное состояние? интересно это реально на bcb организовать?

Автор: mrbrooks 26.4.2010, 07:41
у формы есть свойства AlpaBlend & AlpaBlendValue.
Соответственно перед перемещением (WM_WINDOWPOSCHANGING) 
Код

AlpaBlend = true;
AlpaBlendValue = 125;

После перемещения (WM_WINDOWPOSCHANGED) 
Код

AlpaBlend = true;
AlpaBlendValue = 255;

Гуд лак!

Автор: Dem_max 27.4.2010, 16:46
вот еще

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)