| 
| 
 | Вопрос # 198/ вопрос открыт / | 
 |  Как отследить перемещение формы? Такого события нет вроде! Ну вообще то я видел уже что-то по этому поводу в Интернете, но мне бы хотелось, чтобы объяснили!Это надо для того, чтобы остальные формы моего программного средства двигались вместе с панелью инструментов, как прикреплённые!
 Заранее спасибо!
 
|  |   Вопрос задал: RedMask (статус: Посетитель)Вопрос отправлен: 15 декабря 2006, 13:52
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: PaVeL-Ekt Здравствуйте, RedMask!
 Да Вы правы события такого нету,
 но есть событие OnMouseMove
 
 Создадим глобальную переменную типа
 Type TForm_coord=record
 X: integer;
 Y: integer;
 end;
 
 Var
 Form1: TForm1;
 Form_Coord: TForm_coord;
 
 теперь обработчик движения мыши:
 Procedure TForm1.OnMouseMove(Sender: TObject; ...);
 begin
 if (ssLeft in state)and((x>0)and(x<form1.width)and(y>0)and(y<)) then
 if (x<>Form_Coord.x)or(y<>Form_Coord.y) then
 begin
 //ваша Функция или процедура при передвижении формы;
 Form_Coord.x:=x;
 Form_Coord.y:=y;
 
|  | Ответ отправил: PaVeL-Ekt (статус: 2-ой класс)Время отправки: 15 декабря 2006, 14:13
 Оценка за ответ: 4
 |  Ответ #2. Отвечает эксперт: Вадим К Зачем так сложно? И мне кажеться это не совсем то, что просят у нас. Итак, вот мой вариантв public части формы обявим новый метод.
 public
 procedure WMMove(var mess:TWMMove);message WM_Move;
 Дальше жмём Ctrl+Shift+C и Делфи сгенерирует обработчик. Там можно писать код обработки. Текущие координаты формы можно узнать непосредственно (Top и Left) или с этого параметра, так как он - структура.
 Эта процедурка будет дёргаться каждый раз, когда форма будет соваться по экрану
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 15 декабря 2006, 16:49
 Оценка за ответ: 4
 |  
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 25 января 2007, 21:17; участников в обсуждении: 2. 
|   | PaVeL-Ekt (статус: 2-ой класс), 15 декабря 2006, 14:17 [#1]:сорри нечайно нажал отправить, вот полный код: Здравствуйте, RedMask!
 
 Да Вы правы события такого нету,
 но есть событие OnMouseMove
 
 Создадим глобальную переменную типа
 Type TForm_coord=record
 X: integer;
 Y: integer;
 end;
 
 Var
 Form1: TForm1;
 Form_Coord: TForm_coord;
 
 теперь обработчик движения мыши:
 Procedure TForm1.OnMouseMove(Sender: TObject; ...);
 begin
 if (ssLeft in state)and((x>0)and(x0)and(y<((GetSystemMetrics(SM_CYCAPTION))) then
 if (x<>Form_Coord.x)or(y<>Form_Coord.y) then
 begin
 //ваша Функция или процедура при передвижении формы;
 Form_Coord.x:=x;
 Form_Coord.y:=y;
 end;
 end;
 
 Еще при создании формы в Form_Coord задайте начальные координаты;
 |  
|   | PaVeL-Ekt (статус: 2-ой класс), 15 декабря 2006, 14:23 [#2]:я писал без делфы на память, а потому прошу прощения за возможные неточности в часности в следующих строках: if (ssLeft... //установите курсор на Shift и клик F1 там точно написано какой Left
 в этой-же строке нужно уточнить x считаеться с начала по форме или по экрану
 если по экрану тогда необходимо добавить
 x>Form1.Left ... x
y>Form1.Top ... y
вроде все
 |  
|   | Виталик (статус: Посетитель), 25 января 2007, 21:17 [#3]:Зачем нужен тип TForm_coord? Ведь тип TPoint - это тоже самое! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |