|
Вопрос # 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 - это тоже самое!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|